bash中的简单字符串比较

bash中的简单字符串比较,bash,Bash,我希望得到一个目录中子目录的数量,并将其与预定义的数量进行比较 例: 它会给我一个x的数字(在我的例子中是52),但总是说“不相等”。我做错了什么?任何帮助都将不胜感激 谢谢更换 x=echo ls -d */ | wc -l | sed 's/^ *//g' 与: 解释:当您编写x=echo ls-d*/…时,bash认为您的意思是临时将变量x的值设置为“echo”,然后运行ls命令。相反,您希望运行命令s-d*/|wc-l | sed's/^*//g',并将输出保存在x中。构造x=$(…)

我希望得到一个目录中子目录的数量,并将其与预定义的数量进行比较

例:

它会给我一个x的数字(在我的例子中是52),但总是说“不相等”。我做错了什么?任何帮助都将不胜感激

谢谢

更换

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

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

另外,bash的
[
命令不接受
=
。请使用
=
进行字符串比较。但是,您确实需要数学比较。因此请使用“-eq”:

  if [ "$x" -eq "$y" ]; then
对于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

实际上,它不会给你一个数字。考虑使用[]-谓词的双方括号形式,除非您需要与没有此扩展名的shell兼容,原因如下:我知道这本身不会给我一个数字,但我正在比较两个字符串;除非我遗漏了什么?不幸的是,我也尝试了双方括号。感谢您的快速回复。我没有请注意,它不再打印x的值,但它仍然没有正确地计算我的比较。52==52显示不相等。除非我仍然缺少什么?我最初用“eq”开始,然后用“eq”,但两者的结果都不相等。再次感谢。
  if [ "$x" -eq "$y" ]; then
cd /Applications/
dirs=( */ )   # dirs is an array with the names of directories here
if (( ${#dirs[@]} == $y )); then
    echo "equal"
else
    echo "not equal"
fi