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

Ole*_*nko 1 unix linux bash

为什么这个表达有效cat > d.txt <<< "$val"并且cat > d.txt <<< $val不起作用?据我所知<<<,将变量值重定向到stdin.我对吗?

Vau*_*ato 5

cat >d.txt <<<$val只要不$val包含空格就能正常工作.否则,使用双引号是必要的,以防止将每个单词$val视为单独的参数.

例如,如果你有

val="a b"
cat >d.txt <<<$val
Run Code Online (Sandbox Code Playgroud)

shell试图做的是

cat >d.txt <<<a b
Run Code Online (Sandbox Code Playgroud)

所以只提供"a"作为输入,而"b"只是另一个参数cat.

通过使用双引号

val="a b"
cat >d.txt <<<"$val"
Run Code Online (Sandbox Code Playgroud)

现在shell执行了

cat >d.txt <<<"a b"
Run Code Online (Sandbox Code Playgroud)

所以整个字符串"a b"被视为输入.