Bash
bash:用另一個數組匹配和替換使用者輸入
首先,對不起標題。我不知道如何用幾句話來表達我的雄心壯志。但是,從編碼/腳本的角度來看,它應該是非常基本的。雖然,我不知何故未能實現它:/
我有一個等待使用者輸入的 bash 腳本(通過提示符或命令行參數)。由於只有少數可接受的答案,我將它們與數組進行檢查。我們暫時稱它為“包”。每個接受的答案都類似於其他東西的簡單易讀的別名。這將在第二行的數組中聲明。
declare -a packs=('low', 'mid', 'high') declare -a packcontent=('1+1+2', '2+2+3', '3+3+4') parameters=${packcontent[xxx]}
我失敗的地方是用第二個數組解析第一個數組。如何獲取使用者輸入的索引以便將其傳遞到變數中?
範例:如果使用者說“低”,它應該注意到“低”是第一個數組的第一個(第零個)元素。因此,“參數”應分配給第二個數組的第一個(第零個)元素。
parameters=1+1+2
我不確定我是否錯過了中間步驟或 bash 不能替代它,但我不知道如何實現這一點。
希望我對這個問題的解釋沒有那麼混亂。
親切的問候!
這看起來像是 bash 關聯數組的工作!
您可以製作將字元串作為索引的數組。您可能將它們稱為其他語言的“雜湊”或“地圖”。考慮以下:
$ declare -A packs $ packs=( [low]='1+1+2' [mid]='2+2+3' [high]='3+3+4' ) $ parameters=${packs[low]} $ echo $parameters 1+1+2
wyrm 的回答在使用最新版本時非常好
bash
,但是對於 4.0 之前的版本(例如在 macOS 上),您將不得不依賴普通數組。您可以這樣做:
packcontent=('1+1+2' '2+2+3' '3+3+4') low=0 mid=1 high=2 parameters=${packcontent[mid]}
in 的值
$parameters
將是2+2+3
因為那是索引 1 in 的值packcontent
。mid
不需要以$
(" "$mid
) 作為前綴,因為數組索引是在算術上下文中計算的。對於
/bin/sh
(無數組),您可能會逃脫set -- '1+1+2' '2+2+3' '3+3+4' low=1 mid=2 high=3 eval "parameters=\$$mid"
也就是說,可能的參數列表保存在 中,
"$@"
並且在其中之一的幫助下或在分配給時引用$low
正確$mid
的$high
參數parameters
。執行分配eval
將獲得parameters=$n
要評估的字元串,並n
替換為$mid
(在這種情況下)的值。