【问题标题】:if condition in bash script not working [duplicate]如果 bash 脚本中的条件不起作用 [重复]
【发布时间】:2016-08-08 05:45:54
【问题描述】:

例如:

#!/bin/bash
DIR=`dirname $0 `
Save_DIR="Save"
cd $DIR 

if  [ -d $Save_DIR ];then
     rm  $Save_DIR/*
else
     mkdir  $Save_DIR
fi

 for  i  in  $(ls)
 do
     if  [  $i==$Save_DIR ]
     then
         echo "is same "
     fi
 done

我认为正确的结果是一行“相同”,但我们运行它

is same 
is same 
is same 
is same 
is same 
is same 
is same 
is same 
is same 
is same 

似乎代码if 什么都不做,为什么?

【问题讨论】:

标签: bash


【解决方案1】:

这必然是在做测试[ -n $i==$Save_DIR ],测试字符串是否为非空,因为你没有在=周围提供任何空格。

你需要做的:

[ "$i" = "$Save_DIR" ]

== 是 bash-ism,但 [ 不是,所以你应该改用 =,但如果你使用 bash 就可以了。使用[ 时引用变量以防止分词和文件名扩展。

也不要解析ls,你可以在这里轻松地使用shell globbing:

for i in *

只匹配目录:

for i in */

【讨论】:

  • 并在更改目录后添加测试cd $DIR || exit 1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-17
  • 2014-03-18
  • 2021-10-30
  • 1970-01-01
  • 2023-01-25
  • 2022-10-23
相关资源
最近更新 更多