gpt4 book ai didi

linux - 为什么 cat <<< $VAR1 会丢失换行符?

转载 作者:太空宇宙 更新时间:2023-11-04 10:09:10 25 4
gpt4 key购买 nike

示例 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com