我的脚本根据要打印的表将变量构造成给定的顺序。 但是,如果结束字符串中有任何空格,printf 会将其视为单独的列。 想象一下以下内容:
one=1
two="2 3"
all="$one $two"
format="%5s%5s"
printf $format $all
printf 命令如何正确理解传入$all变量? 我知道它们正在被扩展,并且 printf 仅将其视为单个字符串,但我找不到一种方法可以让它在变量中有空格的地方工作,就像 $four 中的空格一样。
它不能,正如所写的。不能有选择地将某些空格视为分词,而将其他空格视为不在参数扩展中。但是,您可以使用数组来保留非分词空格。
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