変数拡張に何も表示されないのはなぜですか?

変数拡張に何も表示されないのはなぜですか?

次のような場合、$ IFSが結果を生成しないのはなぜですか?

$ echo $IFS

しかし、

$ printf '%q\n' "$IFS"
$' \t\n'

$ echo "$IFS" | od -bc
0000000 040 011 012 012
             \t  \n  \n
0000004

答え1

存在する:

echo $IFS

以下を除くすべてのBourne様シェルにglob + split演算子の影響を受ける二重引用符で囲まれた変数はありませんzsh

echo glob(split($IFS))

文字IFS自体は分割に使用されるため、拡張は空で空白行のみが$IFS表示されますecho

二重引用符を使用すると、その"$IFS"内容がIFSそのままechoに渡され、デフォルトの空白、タブ、および改行が表示されますIFS


%qコマンドディレクティブprintfはの拡張でksh、シェル入力で再利用できる形式で文字列を出力しますが、シェル変数の拡張には影響しません。bashzsh

関連情報