制表符和换行符的 ANSI C 引用有时不起作用

制表符和换行符的 ANSI C 引用有时不起作用

我正在尝试在 bash 中使用换行符。我发现我需要 ANSI C 引用(即 $'\n'),但这通常对我不起作用。所以我想知道我做错了什么。

# This works
>> echo $'a\nb\nc'
a
b
c

# This doesn't 
>> A=$'a\nb\nc'
>> echo $A
a b c 

# Also, this does not work
>> A="a b c"
>> echo ${A// /$'\n'}
a b c 

如果我使用制表符而不是换行符,我也会遇到同样的问题。其他 ANSI C 引用工作如 \'、\" 甚至 \b。

GNU 重击;版本:4.3.11(1)

答案1

因为您没有在以下位置引用该变量:

echo $A

它容易分裂和通配。第一步是扩展变量的内容:

echo a $'\n' b $'\n' c-- 其中$'\n'位代表实际的换行符。

然后,各个部分在 $IFS 上分割,结果是:

echo a b c

然后,由于没有通配符来生成其他文件名,因此字符串将传递到echo.

当您用 引用变量时echo "$A",您可以抑制拆分和通配符。

如果修改 IFS,请自行查看更改:

oIFS=$IFS
IFS=
echo $A
IFS=$oIFS

相关内容