次のような場合、$ 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
、シェル入力で再利用できる形式で文字列を出力しますが、シェル変数の拡張には影響しません。bash
zsh