"echo $ IFS"はIFS値を返しません。

ieIFSに設定しました。値を確認すると、二重引用符を使用しないと空白になります。xIFS=xIFS

~ $ echo $IFS | cat -e
$
~ $ echo "$IFS" | cat -e
x$
~ $ echo $HOME   
/home/mar
~ $ echo "$HOME"
/home/mar
~ $ 

上記のように、$HOME動作はこれと同じではありません。この行動の理由は何ですか?

ベストアンサー1

変数が展開された後、単語分割が発生して空の単語に分割されます。分割は、変数の各文字を区切り文字として使用IFSされ、$IFSの文字のみに拡張されるため、空のIFS単語に分割されます。

たとえば、次のようになります。

IFS=xxx;
printf %q $IFS
''''''[root@localhost ~]#

二重引用符を使用すると、bashに引用符内のすべての内容を1つの単語として処理するように指示します。

printf %q "$IFS"
xxx[root@localhost ~]#

おすすめ記事