首先,我想为糟糕的标题道歉,我的问题最好通过以下示例说明:
这个命令工作正常,但这样做没有多大意义。
sudo bash -c 'pwd 2>/dev/null'
但是当我把它放在变量中时,并执行:
COMMAND="sudo bash -c 'pwd 2>/dev/null'"
(set -xv; ${COMMAND})
我收到引用不匹配的错误:
+ sudo bash -c ''\''pwd' '2>/dev/null'\'''
2>/dev/null': -c: line 0: unexpected EOF while looking for matching `''
2>/dev/null': -c: line 1: syntax error: unexpected end of file
此处的问题似乎是pwd
和2>/dev/null
之间的空格,以下作品:
COMMAND="sudo bash -c 'pwd'"
(set -xv; ${COMMAND})
即使我在pwd
我在这里做错了什么?我该如何解决?提前致谢。
答案 0 :(得分:3)
你至少应该使用一个数组,它作为第二层正确引用,而不是扁平字符串:
my_command=(sudo bash -c 'pwd 2>/dev/null')
"${my_command[@]}"
但是,您应该重新考虑为什么您认为有必要首先存储这样的命令。功能是一个更好的主意:
my_command () {
sudo bash -c 'pwd 2> /dev/null'
}
my_command
答案 1 :(得分:0)
上面的评论是正确的,您可以找到更好的方法来做到这一点。但是,扮演魔鬼的拥护者,你试过eval
来运行命令吗?
COMMAND="sudo bash -c 'pwd 2>/dev/null'"
(set -xv; eval $COMMAND)