Bash

bash 特殊參數 $@ 是否被視為 printf 中的循環?

  • March 26, 2018

所以我正在測試以下內容:

foo() {  
 printf "\nAll the parameters, each on a separate line:\n"  
 printf "param: %s\n" "$@"  
}  

foo The "nicely colored" rainbow  

輸出是:

All the parameters:  
param: The
param: nicely colored
param: rainbow

因此,如果我理解正確,因為IFS設置為\t\n我們得到由製表符分隔的參數(的第一個字元IFS)。

但是為什麼它們列印在不同的行中?

是每個參數的 printf 執行。即 bash 是否將其轉換為 for 循環?

以下(不帶雙引號)也輸出相同的結果:

printf "param: %s\n" $@

這裡發生的情況是,當您傳遞printf的參數多於(%s和其他事物)的位置格式參數時,它將重複格式。它在多行上重複它,因為你\n的格式字元串中有。$@在這種情況下沒有什麼特別的。

例如:

$ printf 'Foo: %s\n' bar baz
Foo: bar
Foo: baz

$ printf 'Foo: %s %s\n' bar baz
Foo: bar baz

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