
我已經調整了一些程式碼,我必須處理一個可能的選項。運行該函數或使用幫助選項來提供簡要說明。
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 不相容:
結論
- 連字符是非標準的。如果您想要跨外殼相容性,請遠離它們。
- 使用底線而不是連字符:下劃線在任何地方都被接受。