【问题标题】:Can I programmatically include an argument in a bash script?我可以以编程方式在 bash 脚本中包含参数吗?
【发布时间】:2015-09-20 06:37:50
【问题描述】:

我有一个在其中使用 ffmpeg 的 bash 脚本。我希望能够向 my 脚本传递一个参数,如果设置了该参数,则会在我的脚本内的 ffmpeg 命令中添加一个参数。

这是最基本的,这就是我想要做的:

ffmpeg \
# if duration flag is set for my script #
-t $DURATION \
# end if #
-rest of ffmpeg parameters...

我知道我可以将整个内容包装在 if 中,但是 ffmpeg 命令还有很多其他参数需要在两个地方进行更新。

这可能吗?

【问题讨论】:

    标签: bash shell scripting


    【解决方案1】:

    您可以使用数组来存储动态参数:

    if [ some test ]
    then
       args+=(-t "$DURATION")
    fi
    
    ffmpeg "${args[@]}" -rest of ffmpeg parameters...
    

    在这种情况下,您也可以使用不带引号的变量而不是数组,但这不会使用空格或全局字符来处理参数。

    【讨论】:

      【解决方案2】:

      替换

      -t $DURATION \
      

      通过

      $([[ -n "$DURATION" ]] && echo -- "-t $DURATION") \
      

      【讨论】:

      • 谢谢,这看起来像我所追求的,但只是为了让我理解它,这里发生了什么?我之前没见过双方括号 -n 或 echo -- (对 bash 来说很新)
      • [[ ... ]]:根据条件表达式-n "$DURATION" 的评估返回真或假状态。 -n STRING 如果字符串不为空,则返回 true。请参阅:help [[help test