【发布时间】:2014-10-28 14:47:18
【问题描述】:
我对正在编写的 shell 脚本的 bash 函数有疑问。函数如下:
do_command() {
if [[ $DRY_RUN ]]; then
echo $@
else
$@
fi
}
功能很简单,如果设置了 DRY_RUN 标志,我们只打印方法,否则执行。这适用于大多数命令,除了我尝试过不同版本的 git tag 命令:
do_command git tag -a $NEW_VERSION -m '$INPUT_COMMENT'
这实际上执行了标记命令,但是给出了注释$INPUT_COMMENT
我已经尝试了 2 个其他版本,可以提供正确的回显输出,但不允许我执行 git tag 命令。
do_command git tag -a $NEW_VERSION -m "$INPUT_COMMENT"
和
do_command git tag -a $NEW_VERSION -m "\"$INPUT_COMMENT\""
有没有办法让 echo 和 git 命令在这个调用中都起作用?还是需要在do_command版本中解析?
【问题讨论】:
-
顺便说一句,shellcheck.net 会在不需要人工审查的情况下抓住这个。
-
(顺便说一句——全大写的名称是 shell 内置函数和环境变量的常规名称,但是将它们用于常规的、非导出的变量是不好的形式,因为这意味着您可能会无意中覆盖其他类别)。
-
请记住,
do_command之类的命令仅适用于简单命令。没有管道,没有&&/||列表,没有 I/O 重定向,没有复杂的命令:除了命令名称及其参数之外,没有什么需要语法。 -
@CharlesDuffy 感谢您的反馈,总是很好地使用在线工具来帮助您,将所有变量更新为小写。