我希望获取目录中的子目录数量,并将其与预定义的数字进行比较。
例如:
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),但总是说“不相等”。我究竟做错了什么?任何帮助将不胜感激。
由于
答案 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':
=