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

printf is using my files in the directory the script is called from

我有一行代码 printf "%5d%s%s%d%s" $opNum $IDLE_TEXT $LINE_ENDER $ops "." 传递的所有变量都已定义,但出于某些不正当的原因,printf 正试图从调用脚本的目录中获取文件。

错误输出示例:

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

有人知道这里发生了什么吗?

如果您的目的是让 . 作为输出的一部分,请将其作为 <FORMAT> 部分的一部分 而不是 部分在 <ARGUMENTS...> 部分,当您认为 printf

一样工作时
printf <FORMAT> <ARGUMENTS...>

所以在前面的部分加上.

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

并双引号所有 shell 变量,以避免 shell.

中的默认字段分隔符进行分词

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

对未加引号的变量扩展的(post-扩展)值执行通配。

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

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