Bash-如何扩展变量并将其单引号传递给sudo

时间:2018-10-29 02:46:23

标签: 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
  

hoge
  大   ge

key='h oge'
sudo -i -u ansible grep -E "'"$key"'" $file
  

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

1 个答案:

答案 0 :(得分:2)

我从没想过要这么说,但是Use Fewer Quotes(商标待定)。这应该可以正常工作:

sudo -i -u ansible grep -q -E "$key" "$file"

基本上,您只需为文字代码提供语法引号(除非您正在做eval)。


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