Bash-如何展开变量并单引号将其传递给sudo 问题:

Bash-如何展开变量并单引号将其传递给sudo 问题:,bash,Bash,如何展开shell变量,单引号引用它,然后将它传递给sudo 企图 这是行不通的 key="some string including special characters" file='/home/ansible/.ssh/authorized_keys' sudo -i -u ansible grep -q -E "'"${key}"'" $file 它不起作用 sudo -i -u ansible cat /home/ansible/.ssh/authorized_keys 霍格

如何展开shell变量,单引号引用它,然后将它传递给sudo

企图 这是行不通的

key="some string including special characters"
file='/home/ansible/.ssh/authorized_keys'

sudo -i -u ansible grep -q -E "'"${key}"'" $file
它不起作用

 sudo -i -u ansible cat /home/ansible/.ssh/authorized_keys
霍格
h oge
霍格

grep:oge':没有这样的文件或目录


我从没想过我会这么说,但是(商标待定)。这应该很好:

sudo -i -u ansible grep -q -E "$key" "$file"
基本上,您只需要为文字代码提供语法引号(除非您正在执行
eval



如果
key
中的字符在正则表达式中具有特殊意义,则这是一个完全不同的问题。在这种情况下,使用
grep-q-F“$key”“$file”
来搜索文本字符串而不是扩展正则表达式。

这里重要的是
sudo
(正确!)不会运行shell,因此(在直接shell之后,一如既往)一开始就不需要引用。非常感谢。没有完全理解sudo是如何设计的。这不是特定于
sudo
。在编写shell脚本时,实际上不需要使用多组语法引号。只有当您将字符串作为代码进行求值(例如使用
eval
)时,才应该有多个层次的语法引号。
sudo -i -u ansible grep -q -E "$key" "$file"