我有一个案例脚本如下:
for i in "$@"; do
arg=( $@ )
case $i in
--string)
for ((i=0; i<${#arg[@]}; i++)) ; do
if [ "${arg[$i]}" == "--string" ] ; then
((i++))
STRING=${arg[$i]}
fi
done
;;
*)
print_help
exit
;;
esac
done
当我运行./test --some_command --string pattern;它会打印帮助选项。 当我在字符串中运行./test --some_command --string pattern而没有*)选项时,它可以工作。
你能告诉我如何解决这个问题。
另一个例子:
#!/bin/bash
test(){
echo i am testing this now
}
print_help()
{
echo help
}
for i in "$@"; do
arg=( $@ )
case $i in
--string)
for ((i=0; i<${#arg[@]}; i++)) ; do
if [ "${arg[$i]}" == "--string" ] ; then
((i++))
STRING=${arg[$i]}
fi
done
echo $STRING
;;
--test)
test
;;
*)
print_help
exit
;;
esac
done
当我运行./test --string pattern --test时。它打印 图案 帮助
答案 0 :(得分:3)
当for循环变为“pattern”时,它不被case分支覆盖,因此它会命中默认分支并打印帮助。您必须以更智能的方式迭代参数。将for
循环替换为
while (( $# > 0 )); do
arg=$1
shift
case $arg in
--string) STRING=$1; shift; echo "$STRING" ;;
--some-command) : ;;
--) break ;;
*) print_help; exit ;;
esac
done