示例 1:从 shell 打印两行
$ cat <<< $'Line 1\nLine 2'
Line 1
Line 2
示例 2:不打印两行,为什么?
$ VAR1=$'Line 1\nLine 2'
$ cat <<< $VAR1
Line 1 Line 2
检查 VAR1
的值,看看它是否正是我设置的值:
set | grep VAR1
输出:
VAR1=$'Line1\nLine2'
那么,如果 VAR1
是我设置的,为什么变量扩展产生的结果与文字字符串不同 - \n
被替换为空格?
最佳答案
虽然 here 字符串中的参数扩展不应该 进行分词,但直到 bash 4.4
才真正做到这一点。扩展中的换行符被视为任意空格,在将结果传递到 cat
的标准输入之前,shell 将其替换为单个空格。
引用扩展保留 bash
早期版本中的文字换行符:
bash-4.3$ VAR1=$'Line 1\nLine 2'
bash-4.3$ cat <<< $VAR1
Line 1 Line 2
bash-4.3$ cat <<< "$VAR1"
Line 1
Line 2
但未加引号的扩展在 bash
4.4 中按预期工作:
bash-4.4$ VAR1=$'Line 1\nLine 2'
bash-4.4$ cat <<< $VAR1
Line 1
Line 2
关于linux - 为什么 cat <<< $VAR1 会丢失换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50137589/