我正在编写一个关于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'
实际上执行了tag命令,但是给出了注释 $ INPUT_COMMENT
我已经尝试了另外两个版本,它们提供了正确的echo输出,但是不允许我执行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版本吗?
答案 0 :(得分:5)
使用带引号的"$@"
来正确处理带有空格的参数。如果您只是写$@
,那么当git
包含空格时,$INPUT_COMMENT
命令就无法运行。
do_command() {
if [[ $DRY_RUN ]]; then
echo "$@"
else
"$@"
fi
}
用法:
do_command git tag -a $NEW_VERSION -m "$INPUT_COMMENT"