示例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
被空格替换?
答案 0 :(得分:1)
虽然此处字符串中的参数扩展不是假设进行分词,但在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