【发布时间】:2010-06-10 08:44:31
【问题描述】:
我编写了一个名为“isinFile.sh”的小 bash 脚本,用于检查是否可以在文件“file.txt”中找到赋予脚本的第一个术语:
#!/bin/bash
FILE="file.txt"
if [ `grep -w "$1" $FILE` ]; then
echo "true"
else
echo "false"
fi
但是,像这样运行脚本
> ./isinFile.sh -x
中断脚本,因为-x 被grep 解释为一个选项。
所以我改进了我的脚本
#!/bin/bash
FILE="file.txt"
if [ `grep -w -- "$1" $FILE` ]; then
echo "true"
else
echo "false"
fi
使用 -- 作为 grep 的参数。正在运行
> ./isinFile.sh -x
false
有效。但是使用-- 是防止 bash 脚本中的代码/选项注入的正确且唯一的方法吗?野外没见过,只发现ABASH: Finding Bugs in Bash Scripts里提到过。
【问题讨论】:
-
为什么在
[中使用反引号而不是直接使用grep -q? -
我尝试了您的建议,但
if [ grep -q -w -- "$1" $ACCOUNTS_DGRID ];对我不起作用。我收到./isinFile.sh: line 5: [: too many arguments之类的错误 -
他的意思也没有方括号:
if grep -q -w -- "$1" $ACCOUNTS_DGRID -
好的,我明白了。所以对 Ignacio 评论的回答是,我不知道
grep的-q选项。谢谢你的提示!但是与我的版本相比,使用grep -q的优势是什么?我仍然必须使用--来防止选项注入。
标签: bash options code-injection