从终端调用时如何将具有特殊字符的变量传递到 bash 脚本中

How to pass variables with special characters into a bash script when called from terminal

大家好,我在 linux OS 上有一个程序 运行ning,它允许我在触发时调用 bash 脚本(例如文件传输).我会 运行 像这样:

/usr/bin/env bash -c "updatelog.sh '${filesize}' '${filename}'"

脚本的工作是用文件名和文件大小更新日志文件。但是,如果我在文件名中传递一个带有单引号的文件名,那么它将破坏脚本并给出一个错误提示 "Unexpected EOF while looking for matching `''"

我意识到带有单引号的文件名会使调用命令无效,因为单引号混淆了命令本身。但是,如果可以的话,我不想清理变量,因为我希望我的日志显示确切的文件名,以便以后更容易交叉引用。这是可能的还是清理这里的唯一选项?

非常感谢您的时间和帮助。

绝对不需要消毒。

假设您的脚本可以正确执行(具有 +x 权限和有效的 shebang 行),最简单的解决方案是:

./updatelog.sh "$filesize" "$filename"

如果出于某种原因您必须使用bash -c,请在您的代码周围使用单引号而不是双引号,并使您的数据out-of-band来自该代码:

bash -c 'updatelog.sh "$@"' 'updatelog' "$filesize" "$filename"

请注意,只有 updatelog.sh "$@"-c 参数中并被解析为代码,并且此字符串 在单引号 中,没有任何传递任何变化。

后面是你的论据[=16=]</code>和<code>[=16=] 在打印错误消息时使用,而 </code> 和 <code> 进入参数列表 - 又名 $@ - 传递给 updatelog.sh.