【发布时间】:2017-07-15 00:49:21
【问题描述】:
我正在制作一个程序外壳 (#!/bin/sh),问题是 printf 只显示字符串参数的第一个单词。
这是为您简化的代码摘录:
#!/bin/sh
test="Good morning"
printf "\n"
printf $test
printf "\n"
此代码仅输出Good。
【问题讨论】:
-
当您不想进行任何格式化时,为什么要在这里使用
printf?
我正在制作一个程序外壳 (#!/bin/sh),问题是 printf 只显示字符串参数的第一个单词。
这是为您简化的代码摘录:
#!/bin/sh
test="Good morning"
printf "\n"
printf $test
printf "\n"
此代码仅输出Good。
【问题讨论】:
printf?
双引号你的变量以避免被shell分词
printf "$test"
此外,printf 的一般语法如 C 将是有
printf <FORMAT> <ARGUMENTS...>
文本格式在<FORMAT> 中给出,而格式字符串可能指向的所有参数都在此之后给出,这里用<ARGUMENTS…> 表示。
您看到的问题是因为bash 中的未引用变量调用了分词。这意味着该变量在空格上拆分(或任何特殊变量 $IFS 已设置为),并且每个生成的单词都用作一个 glob(它将扩展以匹配任何匹配的文件名)。你的问题是因为分裂部分。
【讨论】:
正确。只有第一个参数是格式字符串,其他是要格式化的附加参数。 Just like in C.
printf '\n'
printf '%s' "$test"
printf '\n'
【讨论】: