コマンド置換で末尾が削除されたため、改行のサフィックスとして char が追加されまし\b
た。そのため、は の接尾辞として使用され、byはもはや末尾にないため、コマンド置換から返されます。\n
\n
$(...)
\b
\n
\n
副次的効果は、char だけでなく、セパレーターとしてもIFS
含まれることです。これは、私たちの唯一の関心事です。\b
\n
いつか文字列に表示されると予想さ\b
れる場合 (なぜ表示されないのですか?)、次のように使用できます。
IFS="$(printf '\nx')" && IFS="${IFS%x}";
それreturns \n suffixed with x
&&
removes x
現在、IFS には\n
char のみが含まれています。
IFS="$(printf '\nx')" && IFS="${IFS%x}";
echo ${#IFS}; # 1
\b
、テストの場合、何も壊れません:
#!/bin/sh
sentence=$(printf "Foo\nBar\tBaz Maz\bTaz");
IFS="$(printf '\nx')" && IFS="${IFS%x}";
for entry in $sentence
do
printf "Entry: ${entry}.\n";
done
2行を提供します(1つのため\n
):
Entry: Foo.
Entry: Bar Baz Maz Taz.
予想通り。
IFS="$(printf '\nx')" && IFS="${IFS%x}";
使用:
IFS="
"
同じ結果が得られますが、これらの 2 行をインデントしてはなりません。" と " の間に誤ってスペースやタブ、またはその他の白い文字を入れた場合、\n
そこにある文字だけではなく、いくつかの "ボーナス" も含まれます。 . エディタで「すべての文字を表示」オプションを使用しない限り、このバグを見つけるのは困難です。