bash中的简单字符串比较

时间:2013-12-11 00:12:19

标签: bash

我希望获取目录中的子目录数量,并将其与预定义的数字进行比较。

例如:

cd /Applications/
x=echo ls -d */ | wc -l | sed 's/^ *//g'
y="52"

if [ "$x" == "$y" ]; then
    echo "equal"
else
    echo "not equal"
fi

它会给我一个x的数字(在我的情况下为52),但总是说“不相等”。我究竟做错了什么?任何帮助将不胜感激。

由于

2 个答案:

答案 0 :(得分:3)

对于bash,请执行以下操作:

cd /Applications/
dirs=( */ )   # dirs is an array with the names of directories here
if (( ${#dirs[@]} == $y )); then
    echo "equal"
else
    echo "not equal"
fi

答案 1 :(得分:0)

替换

x=echo ls -d */ | wc -l | sed 's/^ *//g'

使用:

x="$(ls -d */ | wc -l | sed 's/^ *//g')"

说明:当您编写x=echo ls -d */ ...时,bash认为您的意思是暂时将变量x设置为值“echo”,然后运行{{ 1}}命令。相反,您希望运行命令ls并将输出保存在x中。构造s -d */ | wc -l | sed 's/^ *//g'告诉bash执行parens中的任何内容并将输出分配给x=$(...)

此外, bash的x命令不接受[。使用==进行字符串比较。但是,你真的想要数学比较。所以使用'-eq':

=