使用printf的空格展开变量

时间:2014-01-10 17:28:04

标签: bash variables printf

我的脚本根据要打印的表将变量构造成给定的顺序。但是如果结束字符串中有任何空格,printf会将其视为单独的列。想象一下:

one=1
two="2 3"
all="$one $two"
format="%5s%5s"
printf $format $all

printf命令如何正确理解$ all中传递的变量?我知道它们正在被扩展,并且printf只是将它看作一个单独的字符串,但我无法找到一种方法让它在变量中有空格的地方工作,就像四元一样。

2 个答案:

答案 0 :(得分:2)

它不能像写的那样。您不能选择性地将某些空格视为分词,而将其他空格选择性地视为参数扩展。但是,您可以使用数组来保留非分词空格。

one=1
two="2 3"
all=( "$one" "$two" )
format="%5s%5s"
printf "$format" "${all[@]}"

答案 1 :(得分:1)

您应该将两个值存储在数组中而不是字符串中。

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