Shell-Script

這是做什麼的?printf ’t%sn’ ‘$@’

  • August 9, 2020

我正在編寫一個更大的 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 非常相似(但不完全相同),但更容易找到。

引用自:https://unix.stackexchange.com/questions/603679