bash脚本中的转义参数?

use*_*394 3 shell bash quoting group

我正在编写一个 bash 脚本,其中我想检查传递给它的参数之一是否为有效组。

我有线路

if [ `grep -c -e '\b$2\b' /etc/group` -eq 0 ]; then
  echo "Error: $2 is not a valid group."
else
Run Code Online (Sandbox Code Playgroud)

这总是告诉我有效的组无效。

我认为这是一个逃避问题;我认为这是为一个名为$2. 错误消息正确显示了传递的参数。但是我不确定我$2是否正确地在反引号内转义。

我如何让这条线工作?

jw0*_*013 7

使用grep's-q选项比命令替换更有效。

if ! grep -q -e "^$2:" /etc/group; then
    echo "Error: $2 not a valid group" >&2
fi
Run Code Online (Sandbox Code Playgroud)

问题是单引号 ( ') 会阻止 shell 变量扩展 ( $)。您需要使用双引号 ( ")。