bash:扩展函数参数

时间:2014-10-28 14:47:19

标签: git bash function shell

我正在编写一个关于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版本吗?

1 个答案:

答案 0 :(得分:5)

使用带引号的"$@"来正确处理带有空格的参数。如果您只是写$@,那么当git包含空格时,$INPUT_COMMENT命令就无法运行。

do_command() {
  if [[ $DRY_RUN ]]; then
    echo "$@"
  else
    "$@"
  fi
}

用法:

do_command git tag -a $NEW_VERSION -m "$INPUT_COMMENT"