/bin/sh 从脚本中向参数数组添加一个元素

/bin/sh Adding an element to the arguments array from within the script

最终目标

本质上,我有一个 while 循环遍历传递给脚本的每个命令行参数,但如果没有传递任何参数,我想设置默认行为。

当前的解决方案

我的计划是测试在此 while 循环之前是否有任何参数,如果没有,只需将默认参数(在本例中为标志)添加到参数数组并让脚本执行从那里开始。

我遇到的问题

我在这里有点绊脚石的地方是找出将这些默认参数添加到参数数组本身的语法(我可以从中获取值没问题)。

这是我目前拥有的:

if test $# -eq 0
then
    # ADD --default TO ARGUMENTS ARRAY HERE
fi

while test $# -gt 0
do
    case "" in
  --opt1) DO STUFF
        ;;
  --opt2) DO MORE / OTHER STUFF
        ;;
  --default) DO DEFAULT STUFF
       ;;
    esac
    shift
done

使用我尝试过的用户定义数组来遵循和修改示例:

if test $# -eq 0
then
    $+=('--default')
fi

但只是得到语法错误

syntax error near unexpected token `'--default''

sh 除了内置的命令行参数列表之外没有数组,因此没有数组的 += 运算符。

你好像还漏了一个字;您所写的计算结果是将 (default) 分配给变量 $+ 的值,但该变量无效(尽管因为没有数组,括号已经导致错误)。

shell 允许您使用 set 来操作内置参数列表。

if test $# -eq 0
then
    set -- --default
fi

条件要求​​数组为空,因此我们只需用您提供的单个元素填充它;在一般情况下,您可以在末尾添加内容

set -- "$@" --default

或相应地在 "$@" 之前放置一些内容(当然包含参数列表的先前值)。