根據要打印的表,我的腳本將變量構造爲給定的順序。但是如果結束字符串中有空格,printf會將其視爲單獨的列。想象一下:使用空格擴展變量printf
one=1
two="2 3"
all="$one $two"
format="%5s%5s"
printf $format $all
printf命令如何理解在$ all中正確傳遞的變量?我知道他們正在擴展,並且printf將它看作一個單獨的字符串,但是我找不到一種方法讓它在像$ 4這樣的變量中有空格的地方工作。
根據要打印的表,我的腳本將變量構造爲給定的順序。但是如果結束字符串中有空格,printf會將其視爲單獨的列。想象一下:使用空格擴展變量printf
one=1
two="2 3"
all="$one $two"
format="%5s%5s"
printf $format $all
printf命令如何理解在$ all中正確傳遞的變量?我知道他們正在擴展,並且printf將它看作一個單獨的字符串,但是我找不到一種方法讓它在像$ 4這樣的變量中有空格的地方工作。
它不能,如書面。您不能選擇性地將一些空格視爲單詞拆分,而將其他空間視爲不在參數展開中。但是,您可以使用數組來保留非分詞空間。
one=1
two="2 3"
all=("$one" "$two")
format="%5s%5s"
printf "$format" "${all[@]}"
您應該將這兩個值存儲在數組中而不是字符串中。
one=1
two="2 3"
all=("$one" "$two") # array with 2 elements
format="%5s%5s"
printf "$format" "${all[@]}" # quoting the array expansion properly passes two args
謝謝。我忘了提到最終$ all是在for循環中構建的,即:all = $ all $ var所以有沒有辦法在循環之前將$ all定義爲數組? – delronhubbard
'all =()'初始化,然後'all + =(「$ var」)'相當於'all = $ all $ var'。 – chepner
有趣......在TPL(自定義應用程序語言)中,這些列表出於某種奇怪的原因,我以前沒有遇到過bash腳本,但是對我的用途來說是完美的。當我的系統決定返回時,我會給出這個運行。 – delronhubbard