Bash 大小写总是默认
Bash Case always goes to default
我正在尝试使用以下代码解析 bash 脚本中的一些参数:
for arg in "$@"
do
case $arg in
-i|--initialize)
SHOULD_INITIALIZE=1
shift # Remove --initialize from processing
;;
-r|--root)
ROOT_DIRECTORY=""
shift # Remove argument name from processing
shift # Remove argument value from processing
;;
*)
echo "Error, Invalid argument $arg"
exit 1
;;
esac
done
但是,当按预期调用函数时
bash script.sh -i -r /some/directory
结果总是
Error /some/directory
似乎“/some/directory”字符串正在重新进入 switch 语句。这不是轮班的全部目的吗?我不太精通 Bash,所以任何帮助将不胜感激。
谢谢!
shift
不会影响接下来将分配给 arg
的值,因为 for
循环有效地“冻结”了要迭代的值集。
改为使用 while
循环:
while [ $# -gt 0 ]; do
case in
-i|--initialize)
SHOULD_INITIALIZE=1
shift
;;
-r|--root)
ROOT_DIRECTORY=""
shift # Remove argument name from processing
shift || { echo "Error, no root directory given"; exit 1; }
;;
*)
echo "Error, Invalid argument "
exit 1
;;
esac
done
与 for
循环不同,while
循环在每次迭代开始时重新评估其条件,其中包括在任何先前轮班后重新评估 $#
的值.
请注意,如果没有 shift 参数,shift
将失败,因此您可以使用其退出状态来检查
是否实际存在。
我正在尝试使用以下代码解析 bash 脚本中的一些参数:
for arg in "$@"
do
case $arg in
-i|--initialize)
SHOULD_INITIALIZE=1
shift # Remove --initialize from processing
;;
-r|--root)
ROOT_DIRECTORY=""
shift # Remove argument name from processing
shift # Remove argument value from processing
;;
*)
echo "Error, Invalid argument $arg"
exit 1
;;
esac
done
但是,当按预期调用函数时
bash script.sh -i -r /some/directory
结果总是
Error /some/directory
似乎“/some/directory”字符串正在重新进入 switch 语句。这不是轮班的全部目的吗?我不太精通 Bash,所以任何帮助将不胜感激。
谢谢!
shift
不会影响接下来将分配给 arg
的值,因为 for
循环有效地“冻结”了要迭代的值集。
改为使用 while
循环:
while [ $# -gt 0 ]; do
case in
-i|--initialize)
SHOULD_INITIALIZE=1
shift
;;
-r|--root)
ROOT_DIRECTORY=""
shift # Remove argument name from processing
shift || { echo "Error, no root directory given"; exit 1; }
;;
*)
echo "Error, Invalid argument "
exit 1
;;
esac
done
与 for
循环不同,while
循环在每次迭代开始时重新评估其条件,其中包括在任何先前轮班后重新评估 $#
的值.
请注意,如果没有 shift 参数,shift
将失败,因此您可以使用其退出状态来检查 是否实际存在。