為了解析參數列表,我嘗試實作一個常見的自頂向下解析方案。
我想知道為什麼我的eat()
功能不起作用。因為位置參數 $1、$2、$3、... 位於該特定函數的上下文中。不是實際腳本的內容。真糟糕。我還沒習慣 bash。
所以我的問題是,如果它是正確的,那麼移位的範圍也是我的eat()
函數的上下文,對嗎?
真的沒有辦法從另一個函數內部轉移腳本參數嗎? :(
[這意味著我必須在 case 語句中實作所有邏輯(通常遵循自上而下的解析器)! (!?)]
答案1
函數可以傳回它所傳遞的參數的全部(或子集)(例如透過全域數組),然後呼叫腳本可以使用它來設定自己的參數。例如
#!/bin/bash
declare -a args
nofoo() {
# we don't like "--foo", it is forbidden!
for a in "$@"; do
[ "$a" != "--foo" ] && args+=("$a")
done
}
nofoo "$@"
set -- "${args[@]}"
來自help set
bash:
放:
set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
設定或取消設定 shell 選項和位置參數的值。
變更 shell 屬性和位置參數的值,或顯示 shell 變數的名稱和值。
[...]
--
將任何剩餘的參數分配給位置參數。如果沒有剩餘參數,則取消設定位置參數。