为什么在将变量重定向到stdin变量时必须使用双引号?

时间:2014-08-14 12:37:26

标签: linux bash unix

为什么此表达式有效cat > d.txt <<< "$val"cat > d.txt <<< $val无效?据我所知,<<<将变量值重定向到stdin。我是对的吗?

1 个答案:

答案 0 :(得分:5)

只要cat >d.txt <<<$val不包含空格,

$val就可以正常工作。否则,必须使用双引号来防止$val中的每个单词被视为单独的参数。

例如,如果你有

val="a b"
cat >d.txt <<<$val

shell试图做的是

cat >d.txt <<<a b

所以只提供“a”作为输入,而“b”只是cat的另一个参数。

使用双引号

val="a b"
cat >d.txt <<<"$val"

现在shell执行

cat >d.txt <<<"a b"

所以整个字符串“a b”被视为输入。