Shell - 将字符串放在向量中具有奇怪的空格行为

时间:2018-05-04 16:56:54

标签: shell

我不得不问你这个问题,因为太多天以来它让我发疯了。

我将用一个例子解释我的问题:

-rwxr-x---     u1:g1       /var/www/example1.com
-rwxr-x---     u2:g1       /var/www/example2.com
-rwxrwx---  httpd:httpd    /var/www/example1-example2-log.com

输出结果为:

s1="aa a"
s2="bbb"
s3="ccc"
s4="ddd"

v=($s1 $s2 $s3 $s4)
echo ${v[0]}
echo ${v[1]}
echo ${v[2]}
echo ${v[3]}
echo ${v[4]}

我的问题是aa a bbb ccc ddd 包含v[0]"aa"包含v[1]。我不明白为什么"a"不是v[0]

我的输出应该是:

"aa a"

... aa a bbb ccc ddd 应为空

为什么空间会产生这个问题?

1 个答案:

答案 0 :(得分:0)

您需要在变量周围添加双引号,如下所示:

v=("$s1" "$s2" "$s3" "$s4")

...这样你就得到了:

v=("aa a" "bbb" "ccc" "ddd")

将变量置于双引号内通常总是一个好主意。

如果没有引号,您将获得以下内容:

v=(aa a bbb ccc ddd)

...所以aa& a被解释为2个单独的字符串。