echoを使用して1行に1つのファイルを印刷する

echoを使用して1行に1つのファイルを印刷する

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

echoprintfいかなる場合でも、任意のデータを出力するために使用することはできません。echoこれは、テキスト出力用の破損したユーティリティをPOSIXに置き換えます。

printf '%s\n' small*jpg

次のようにすることもできます。

printf '%s\0' small*jpg

リストをNULで区切られたレコードに出力します(たとえば、GNUを使用して後処理できます。xargs -r0改行文字は、ファイル名のスペースまたは文字と同じように有効であることを覚えておいてください)。

POSIXが登場する前は、kshを置き換えるユーティリティがprintfありました。 zshがそれをコピーし、1行に1つの引数を印刷するオプションを追加しました。printecho-l

print -rl -- small*jpg

ksh93は印刷に似た-fオプションを追加します。また、コピーされましたが、他のksh実装ではコピーされませんでした。printprintfzsh

print -f '%s\n' -- small*jpg

引数が指定されていない場合、これらの関数はすべて空白行を印刷します。より良いアプローチprintlnは、次の関数で書くことです。

println() {
  [ "$#" -eq 0 ] || printf '%s\n' "$@"
}

存在するzsh

println() print -rC1 -- "$@"

おすすめ記事