Bash脚本:如果任何参数($ @)等于“ foo”,则…抛出“参数过多”

时间:2018-08-31 11:35:11

标签: bash

在bash中,我可以通过$1获取第一个参数,然后通过$2等获取第二个参数。

我想避免对参数的数量进行硬编码,因为它们可以随机顺序出现。因此,我写道:

if [ "$@" == "--no-update" ]; then # this is line 14
    warning "The '--no-update' flag detected. Pull from origin master skipped."
else
    git pull origin master
fi

我通过以下方式调用脚本:

  

sh〜/ code / dir / script.sh -f --no-update

但是args也可以以不同的顺序或数量出现,例如:

  

sh〜/ code / dir / script.sh -f-无论如何-abc -no-update -a -f -maybe-this

输出抛出:

  

第14行:[:参数过多

我在做什么错了?

1 个答案:

答案 0 :(得分:2)

"$@"有点特殊,它扩展为 multiple 个“字段”。

如果您使用以下参数运行脚本:

-f --no-update

然后:

[ "$@" = "--no-update" ]

展开至:

[ "-f" "--no-update" = "--no-update" ]
# ⬑1   ⬑2

[不知道该怎么做(它不能将两个字符串与一个字符串进行比较),因此“ 参数太多”。


要针对所有可用参数进行测试:

for arg
do
  [ "${arg}" = "--no-update" ] &&
    warning "The '--no-update' flag detected. Pull from origin master skipped."
done