如何在bash中执行命令时保留引号

时间:2014-11-18 21:50:35

标签: bash

我有一个bash脚本,其中包含类似于以下内容的内容:

cmd="grep 'a b'"

echo $cmd
$cmd

我遇到的问题是$ cmd由于某种原因删除了'a b'周围的引号,并以grep a b执行命令,导致错误:

% ./test.sh
grep 'a b'
grep: b': No such file or directory

我尝试过各种引号和转义组合,但结果总是一样。

2 个答案:

答案 0 :(得分:5)

存储命令的最佳位置是函数。经验法则:变量用于数据;函数用于命令。

cmd() {
    grep 'a b'
}

...

cmd

答案 1 :(得分:3)

你不应该使用字符串,但数组:

cmd=( grep 'a b' )
"${cmd[@]}"

有关详细信息,请参阅BashFAQ/050