Shell脚本代码段:
tagSearch= $(grep '^\#ctags$' ./"$1" | wc -l)
if [[ $tagSearch -ne "0" ]]
then
...
fi
结果:
line 2: /bb/bin/1: Permission denied
上下文:
我正在尝试检测文件中是否存在特定模式,以便我可以采取特定操作。
我理解我得到的错误,检测工作正常但脚本正在尝试评估结果'1'并在我的路径中运行程序'1'。这不是我想要的。我如何得到我正在寻找的行为?
答案 0 :(得分:7)
问题是
tagSearch= $(grep '^\#ctags$' ./"$1" | wc -l)
----------^
你不能在等号周围使用空格;你在这里真正做的是暂时将tagSearch
设置为环境中的空字符串,然后调用grep '^\#ctags$' ./"$1" | wc -l
,然后尝试将其作为命令运行,因为$()
将插入结果进入命令行。
tagSearch=$(grep '^\#ctags$' ./"$1" | wc -l)
答案 1 :(得分:6)
bash shell中的变量赋值在equals之后不应该有空格。实际上它根本不应该有空格。见下文。
tagSearch=$(grep '^\#ctags$' "./$1" | wc -l)
if [[ $tagSearch -ne 0 ]]
then
...
fi
对于您的错误并不重要,但同时请注意,使用double bracket syntax时,您不需要引用该零值,而不是您要与之比较的变量。
实际上你的整个代码可以使用grep
的完全模式进行重新计算,并评估返回代码以查看是否有任何匹配:
if grep '^\#ctags$' "./$1"
then
...
fi
答案 2 :(得分:5)
实际上你可以更简单,因为如果找到了某些东西,grep的返回码将为0(否则为1),所以你不需要wc -l。你可以写:
if `grep -q pattern file`; then echo "yes"; else echo "no"; fi;