if [ (`grep -R -l "${images}" *` | wc -l) == 1 ]
这是行不通的。如果我在命令行执行此操作,那么它会给我一个数字。
grep -R -l "${images}" * | wc -l
我想看看这个数字是不是 1。如果是,就做点什么。如果不做其他事情。为什么第一个代码块给我一个语法错误?
我已经更新了我的代码。 image_count 的数字是正确的,但由于某种原因它总是做 else 即使 $image_count 真的是 1。所以我的 if 语句不正确。有人知道为什么吗?
image_count=`grep -R -l "${images}" * | wc -l`
echo $image_count
if [ $image_count == 1 ]; then
new_name=`grep -R -l "slide[0-9]"`
echo new_name
else
echo "non 1"
fi
最佳答案
So my if statement isn't right. Anyone know why?
好吧,测试语句(在 [ ]
中)似乎是错误的。
它有点混合了两种语言:bash 的命令语言(命令、可执行文件通过管道传输在一起 + 控制流语法)。
OTOH,在上面的[]
中,它是test
程序的一种表达语言,参见联机帮助页:$ man test :“(表达式)”。
Expression 不是任意的 shell 命令,而是从原语(字符串、数字等)和运算符(-eq、-oe)构建的东西。
这两种语言之间的桥梁当然是反引号 - 它在其中运行 bash 命令并将输出替换为字符串,然后 test
可以使用它。
所以,正如其他人简短回答的那样,只需将反引号移到左侧的边界,即来自:
if [ (`grep -R -l "${images}" *` | wc -l) == 1 ]
到
if [ `grep -R -l "${images}" * | wc -l` = 1 ]
更新:查看您的第二个版本,另一个问题是 ==
不是 test
中的有效运算符(再次参见联机帮助页)。请改用普通 =
。
另一方面,==
由 bash 本身支持(在最近的版本中)- 有点令人困惑..
关于linux - if语句语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6467778/