printf 带引号的字符串

printf 带引号的字符串

我正在尝试在 bash 中创建一个表 - 我已将所有标题收集到一个 var 中 - 但是当我打印这些包含在 " 中的字符串时,这些字符串被视为新列,而不是 printf 命令视为一个列

当我直接传递相同的值时,它工作得很好,但是当我使用 $var 时,我会得到不同的行为。

$ printf '%-20s' "some spaced words" other values; echo -e "\n"
some spaced words   other               values

$ values='"some spaced words" other values'
$ echo $values
"some spaced words" other values
$ printf '%-20s' $values; echo -e "\n"
"some               spaced              words"              other               values

我显然误解了我的变量有何不同,< some string >因此导致了不同的行为。

使用变量时如何获得与输出 1 匹配的输出?

编辑:我可以看到 var 版本有引号 - 有没有办法可以将带引号的字符串作为变量传递给 printf ?

答案1

变量是扩大在 shell 运行任何命令之前,即printf这里,分词发生在变量扩展之后。使用数组代替标量变量:

values=('some spaced words' other values)
printf %-20s "${values[@]}"

相关内容