sh
Debian への接続dash
次のコマンドは、2 つの空行を生成します。
sh -c 'echo "\n"'
なぜ2つの空行があるのですか?なぜ一つもないのですか?なぜ\n
説明しますか?
ただし、busyboxでは、sh
同じコマンドを実行すると次の行が生成されます。
\n
sh
さまざまなプラットフォームでバックスラッシュ処理が均一ですか?バックスラッシュを処理する必要があるという標準はありますか?
答え1
as引数で呼び出されると、POSIX + XSI準拠のecho
実装は改行に\n
拡張する必要があるため、2つの改行を出力します。これに関して、あなたの組み込み機能は互換性があるようです。\n
echo
sh
POSIXでは出力が必要ですが、他のecho
実装ではこれを達成するためのオプションが必要です。 (これは動作が指定されていないPOSIX仕様の将来のバージョンで変更される予定です(XSIオプションを実装するシステムを除く)。-e
echo -e
-e
このような理由などを避けてecho
使用するのが最善ですprintf
。バラよりなぜprintfがechoより優れているのですか?もっと学ぶ。
とにかく、すべてのBourne様シェルで二重引用符内の\
唯一の文字は\
、および文字(特別な意味が削除される)と改行文字$
(これを削除させる)です。"
`
\<NL>
続ける)、いいえn
。だから:
echo '\n'
echo "\n"
echo \\n
echo $'\\n'
これは2文字の文字列であり、\
渡さn
れますecho
(少なくともコードが`...`
最後の2文字以内にない場合)。
1 つの改行文字で構成される文字列を渡すには、次のものが必要です。
echo $'\n'
これは現在、Bourneに似た他の多くのシェルでサポートされているksh93構文です。移植性(Bourneに似たシェル):
echo '
'
echo "
"
これをしたいかもしれませんが:
# at the top of the script:
NL='
'
# or (with the Bourne shell, use `...` instead):
eval "$(printf 'NL="\n" CR="\r" TAB="\t"')"
# and then:
echo "$NL"
読みやすさを向上させます。
Bourneに似たシェルではない場合、状況は異なります。バラより通常の文字のように特殊文字を使用する方法は?詳細。