我正在尝试在 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