Shell-Script
這是做什麼的?printf ’t%sn’ ‘$@’
我正在編寫一個更大的 bash 腳本,我發現這個片段來測試一個目錄是否存在不區分大小寫
現在,如果我現在有一個名為 subs 的目錄,則此腳本將列印路徑,如果我有兩個(或更多),它也會列印那些..
但我不太明白怎麼做,因為只有 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
Shell printf 使用該格式的次數與它具有 args 的次數一樣多。所以它有一個內置的循環。
如果它在字元串中有 3 個 % 字元串,它將一次使用三個 args。最後一次,如果需要,它將預設一個或兩個參數為空白/零。
這 ” $ @" expands all the $ 1, $2, … 目前參數來分隔帶引號的字元串。
在列印格式中(第一個參數)
\t(轉義的 t)是一個製表符,將縮進 8 個空格。
%s 獲取下一個未使用的 arg 並將其作為字元串插入。
\n (轉義的 n)是一個換行符,它將使下一行從下面和列中開始。
man bash
是一個顯示所有內置命令的命令,包括幾頁關於 printf 的內容。
man -s 1 printf
是一個命令,它向您顯示外部命令 /bin/printf 的作用。它與內置的 bash 非常相似(但不完全相同),但更容易找到。