linux - if语句语法错误

标签 linux bash shell terminal grep

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/

相关文章:

linux - 创建一个像普通菜单一样弹出但出现在鼠标位置的 float 菜单

c++ - 如何从 C 程序调用 bash shell 脚本中定义的函数

MYSQL 和 Shell 脚本 : Reference individual row attributes from table results?

bash - 如何在终端(一个 liner sed)中每 n 个字符向大文件添加一个新行?

linux - URL curl 时间

linux - Unix 纪元时间戳到人类可读日期时间和反向转换

linux - curl 帖子问题 : input password became empty

Bash/ffmpeg : How to loop over all wave files that do not have 16bit and 44. 1 khz?

python - 有选择地使用具有周期性输出的 bash 脚本输出来触发另一个脚本

shell - 如何编写笔记本电脑开机后运行的脚本?