1

如果我在命令行上有这个:

bin/my_file --name "this name with whitespace" dir/some_file

然后在我的脚本中:

full_cmd="$@"
# later...
"$full_cmd"

不保留引号。这是我最接近的:

 app=$1
 shift
 $app "$@"

但是,如果可以将“$@”保存到变量中以供以后重复使用,那将很方便,如下所示:

 my_func () {
    $app "$args"
 }

除了凌乱之外,我无法完成任何工作for loops...... 我是 bash 的新手。我已经搜索了所有其他可能的解决方案,但无法弄清楚为什么这这么难。我错过了一些明显的东西吗?

4

2 回答 2

5

$@是一个数组。将其存储在数组中:

ar=("$@")
"${ar[@]}"
于 2013-08-22T16:52:03.713 回答
2

@choroba 答案很好,但您需要知道 $0 不在 $@ 中。这里还有一个替代方案:

printf -v myvar '%q ' "$@"

然后您将字符串外壳转义,因此将被正确解释为单独的参数。让我不要忘记 - 您需要eval用于从变量中调用命令!

顺便说一句,这里 $myvar 是一个普通的字符串变量。它不是上述情况下的数组。只是单独的参数是 shell 转义的,中间有空格。

希望这可以帮助。

资源:

于 2013-08-22T17:35:45.613 回答