1行にファイル/ディレクトリのリストを印刷するにはecho
?
スペースを改行文字に置き換えることができますが、ファイル名にスペースが含まれている場合は機能しません。
$ echo small*jpg
small1.jpg small2.jpg small photo 1.jpg small photo 2.jpg
$ echo small*jpg | tr ' ' '\n'
small1.jpg
small2.jpg
small
photo
1.jpg
small
photo
2.jpg
を使用してこれを行うことができることを知っていますが、をls -d1
使用してこれを実行することも可能ですかecho
?
ベストアンサー1
echo
printf
いかなる場合でも、任意のデータを出力するために使用することはできません。echo
これは、テキスト出力用の破損したユーティリティをPOSIXに置き換えます。
printf '%s\n' small*jpg
次のようにすることもできます。
printf '%s\0' small*jpg
リストをNULで区切られたレコードに出力します(たとえば、GNUを使用して後処理できます。xargs -r0
改行文字は、ファイル名のスペースまたは文字と同じように有効であることを覚えておいてください)。
POSIXが登場する前は、kshを置き換えるユーティリティがprintf
ありました。 zshがそれをコピーし、1行に1つの引数を印刷するオプションを追加しました。print
echo
-l
print -rl -- small*jpg
ksh93は印刷に似た-f
オプションを追加します。また、コピーされましたが、他のksh実装ではコピーされませんでした。print
printf
zsh
print -f '%s\n' -- small*jpg
引数が指定されていない場合、これらの関数はすべて空白行を印刷します。より良いアプローチprintln
は、次の関数で書くことです。
println() {
[ "$#" -eq 0 ] || printf '%s\n' "$@"
}
存在するzsh
:
println() print -rC1 -- "$@"