【问题标题】:printf in shell show only the first word [duplicate]shell中的printf只显示第一个单词[重复]
【发布时间】:2017-07-15 00:49:21
【问题描述】:

我正在制作一个程序外壳 (#!/bin/sh),问题是 printf 只显示字符串参数的第一个单词。

这是为您简化的代码摘录:

#!/bin/sh

test="Good morning"
printf "\n"
printf $test
printf "\n"

此代码仅输出Good

【问题讨论】:

标签: string shell printf


【解决方案1】:

双引号你的变量以避免被shell分词

printf "$test"

此外,printf 的一般语法如 C 将是有

printf <FORMAT> <ARGUMENTS...>

文本格式在&lt;FORMAT&gt; 中给出,而格式字符串可能指向的所有参数都在此之后给出,这里用&lt;ARGUMENTS…&gt; 表示。

您看到的问题是因为bash 中的未引用变量调用了分词。这意味着该变量在空格上拆分(或任何特殊变量 $IFS 已设置为),并且每个生成的单词都用作一个 glob(它将扩展以匹配任何匹配的文件名)。你的问题是因为分裂部分。

【讨论】:

    【解决方案2】:

    正确。只有第一个参数是格式字符串,其他是要格式化的附加参数。 Just like in C.

    printf '\n'
    printf '%s' "$test"
    printf '\n'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      • 2015-12-20
      • 2015-04-25
      • 1970-01-01
      相关资源
      最近更新 更多