在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行:[:参数过多
我在做什么错了?
答案 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