printf正在调用脚本的目录中使用我的文件

时间:2017-04-23 14:52:57

标签: bash shell printf quoting

我有一行代码 printf "%5d%s%s%d%s" $opNum $IDLE_TEXT $LINE_ENDER $ops "." 传递的所有变量都是定义的,但是出于某种不明智的原因,printf正试图在调用脚本的dir中抓取文件。

错误输出示例:

./asg4.sh: line 248: printf: alpha.sh: invalid number 9:1243210asg4.sh

任何人都知道这里发生了什么?

2 个答案:

答案 0 :(得分:1)

如果您打算.将其作为输出的一部分,请将其作为<FORMAT>部分而非的一部分,而不是<ARGUMENTS...>部分1}}部分,当您认为printf作为

printf <FORMAT> <ARGUMENTS...>

因此在前一部分中添加.

printf "%5d%s%s%d." "$opNum" "$IDLE_TEXT" "$LINE_ENDER" "$ops"
#               ^^^  Adding the . to the <format> section

并双引所有shell变量,以避免shell中默认字段分隔符的分词。

从下面的评论来看,似乎因为参数中缺少双引号是实际错误的原因。在您的情况下*尝试扩展文件夹内容。

答案 1 :(得分:0)

对未加引号的变量扩展的(扩展后)值执行Globbing。

以下可能有其他问题(取决于包含的值),但不应导致与globbing相关的问题。

printf "%5d%s%s%d%s" "$opNum" "$IDLE_TEXT" "$LINE_ENDER" "$ops" "."