shell 中的 printf 仅显示第一个单词

Moh*_*our 1 string shell printf

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

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

#!/bin/sh

test="Good morning"
printf "\n"
printf $test
printf "\n"
Run Code Online (Sandbox Code Playgroud)

此代码仅输出Good.

Ini*_*ian 5

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

printf "$test"
Run Code Online (Sandbox Code Playgroud)

此外,printflike的一般语法C

printf <FORMAT> <ARGUMENTS...>
Run Code Online (Sandbox Code Playgroud)

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

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