これは何をしますか? printf '\t%s\n' "$@"

これは何をしますか? printf '\t%s\n'

より大きなbashスクリプトを書いていますが、ディレクトリが存在するかどうかをテストするためにこのコードを見つけました。大文字と小文字を区別しない

subsというディレクトリがある場合、このスクリプトはパスを印刷し、ディレクトリが2つ以上の場合はそのパスも印刷します。

ところで、印刷機能が1つだけあり、ループがないので、どうすべきかは本当に分かりません。

私の考えでは、これは何か関連があると思います。'\t%s\n' "$@"コード...誰かが私に説明できますか? (理解しようとしています)

dir=~/test1
shopt -s nullglob nocaseglob
set -- $dir/[s]ubs/
if [ "$#" -gt 0 ]; then
    echo 'There is at least one directory called "subs" (case ignored):'
    printf '\t%s\n' "$@"
fi

ベストアンサー1

Shell printfは引数の数だけこの形式を使用します。だからループが組み込まれています。

文字列に3つの%文字列がある場合は、一度に3つのパラメータを使用してください。最後のラウンドでは、必要に応じて1つまたは両方のパラメータが空白/ 0にデフォルト設定されます。

"$@" は $1, $2, ... 現在の引数をすべて引用符で囲んだ文字列に拡張します。

印刷形式(最初のパラメータ)

\ t(エスケープt)はタブ文字で、8行のインデントです。

%sは次の未使用引数を取得し、文字列として挿入します。

\ n(エスケープされたn)は、次の行が列の下で始まるようにする改行文字です。

man bashprintf の複数ページを含むすべての組み込みコマンドを表示するコマンドです。

man -s 1 printf外部コマンド /bin/printf の効果を表示するコマンドです。 bash組み込みと非常によく似ていますが(同じではありませんが)、見つけるのは簡単です。

おすすめ記事