【发布时间】:2021-10-25 03:24:24
【问题描述】:
考虑以下简单函数。
X() {
echo "$1"
echo "$2"
echo "$3"
}
现在考虑以下变量:
args="-H 'h1 : v1'"
当我运行命令X $args 时,我得到以下输出:
-H
'h1
:
另一方面,如果我运行命令X -H 'h1 : v1',我会得到以下输出:
-H
h1 : v1
请注意,在后一种情况下,变量值内的引号被正确解释为分隔符。
是否可以修改变量的声明或使用变量的调用以强制上述两个输出相等?
【问题讨论】:
-
作为数据的引号不能替代作为语法的缺失引号。
-
解决这个问题的正确方法是将字符串列表存储在数组中,而不是字符串。
-
即:
args=( -H 'h1 : v1' ),然后是X "${args[@]}"。 -
Re:
X -H 'h1 : v1'-- 你没有在变量的值中显示引号。您的示例中的变量在哪里? -
$2从未包含引号。 shell 使用它们将h1 : v1视为一个单词,而不是 3 个单独的单词,然后将该单词分配给位置参数。
标签: bash environment-variables command-line-arguments