我已经调整了一些代码,我必须处理一个可能的选项。运行该函数或使用帮助选项来提供简要说明。
activate-jet ()
{
local iarg=0 narg="$#"
while (( narg > 0 )); do
opt="$1" ; iarg=$(( iarg + 1 ))
case $opt in
("-h"|"--help") echo "TODO" ; return ;;
(*) break ;;
esac
done
}
如果可以的话,我想进一步简化它,而不会让用户在调用时引入任何奇怪的行为。
答案1
这是一种可能性,因为你说你只需要一争论,因此不需要循环或“加壳”:
$ activate_jet() {
[[ "$#" -gt 1 ]] && echo "Invalid number of arguments" && return
if [[ ! -z "$1" ]]; then
if [[ "$1" = "-h" || "$1" = "--help" ]]; then
echo "TODO" && return
else
echo "Bad argument" && return
fi
fi
echo "jet activated"
}
$ activate_jet foo bar
Invalid number of arguments
$ activate_jet foo
Bad argument
$ activate_jet -h
TODO
$ activate_jet --help
TODO
$ activate_jet
jet activated
现在请注意,我更改了函数的名称,将连字符替换为下划线:activate_jet
而不是activate-jet
,因为连字符可能与某些 shell 不兼容:
结论
- 连字符是非标准的。如果您想要跨外壳兼容性,请远离它们。
- 使用下划线而不是连字符:下划线在任何地方都被接受。