コマンド置換で末尾が削除されたため、改行のサフィックスとして 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 には\nchar のみが含まれています。
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そこにある文字だけではなく、いくつかの "ボーナス" も含まれます。 . エディタで「すべての文字を表示」オプションを使用しない限り、このバグを見つけるのは困難です。