タブと改行に関する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

おすすめ記事