-3
A
回答
4
bash
的select
複合命令不直接支持多種選擇,但你仍然可以基地您的IT解決方案,採取的,無論用戶輸入被記錄在特殊$REPLY
變量的事實優勢:
#!/usr/bin/env bash
choices=('one' 'two' 'three' 'four' 'five') # sample choices
select dummy in "${choices[@]}"; do # present numbered choices to user
# Parse ,-separated numbers entered into an array.
# Variable $REPLY contains whatever the user entered.
IFS=', ' read -ra selChoices <<<"$REPLY"
# Loop over all numbers entered.
for choice in "${selChoices[@]}"; do
# Validate the number entered.
((choice >= 1 && choice <= ${#choices[@]})) || { echo "Invalid choice: $choice. Try again." >&2; continue 2; }
# If valid, echo the choice and its number.
echo "Choice #$((++i)): ${choices[choice-1]} ($choice)"
done
# All choices are valid, exit the prompt.
break
done
echo "Done."
至於如何select
命令正常作品,具有單選擇:
- 運行
man bash
並在標題爲「複合命令」 - 尋找一個註解的示例,請參見this answer。
這答案實現定製邏輯如下:
- 的
select
命令,dummy
的指定的目標變量,將被忽略,並且$REPLY
變量來代替,因爲擊設置它無論用戶輸入什麼(未驗證)。 IFS=', ' read -ra selChoices <<<"$REPLY"
標記化的用戶輸入的值:- 它通過一個here-string(
<<<
)進料至使用逗號和空間(,<space>
)作爲[內部]字段分隔符的實例的read
命令 - (
IFS=...
)- 請注意,作爲副作用,用戶可以使用空格來分隔他們的選擇。
- 並將得到的標記存儲爲數組的元素(
-a
)selChoices
;-r
只是關閉\
字符的解釋。在輸入 for choice in "${selChoices[@]}"; do
在所有令牌上循環,即用戶選擇的單個號碼。((choice >= 1 && choice <= ${#choices[@]})) || { echo "Invalid choice: $choice. Try again." >&2; continue 2; }
確保每個令牌都是有效的,即它是介於1和所呈現的選擇計數之間的數字。使用arithmetic expansion($((...))
)
- 它通過一個here-string(
echo "Choice #$((++i)): ${choices[choice-1]} ($choice)"
輸出每個選擇和選擇號碼- 與正在運行的索引(
i
),其遞增(++i
)前綴 - 因爲在算術上下文的可變默認爲0
,第一個指數產出將是1
; - 後面跟着
${choices[choice-1]}
,即由輸入的數字表示的選擇串,遞減1
,因爲Bash陣列是基於0
的;請注意0在數組下標中不需要$
前綴,因爲在算術上下文中評估下標(就像在$((...))
內部一樣),如上所述。 - 終止於
($choice)
,括號內爲選定的數字。
- 與正在運行的索引(
break
需要退出提示;默認情況下,select
將繼續提示。
+0
其工作非常感謝你,但我想了解你是如何做到的? 並再次感謝你;) –
+0
@zakariagatter:我的榮幸;看到我的更新。 – mklement0
相關問題
- 1. 外殼:getopts的兩個參數選項將停止腳本
- 2. 在一個外殼腳本
- 3. Ubuntu的外殼腳本打開多個選項卡,負載的bashrc文件
- 4. MySQL的選擇外殼
- 5. 傳遞命令行選項 - 殼腳本
- 6. 在選擇框中選擇並取消選擇多個選項
- 7. 開關和外殼選項
- 8. SQLite腳本從多個表中選擇
- 9. 多項選擇/填空標籤腳本
- 10. 基於多項選擇執行腳本
- 11. 在Chrome中選擇多個選項卡
- 12. 將選擇選項複製到另一個選項,但在第一個選項中選擇的選項除外
- 13. 只允許在選擇框中選擇一個選項多個
- 14. Ruby腳本從選擇列表中選擇並提交選項
- 15. JQuery - 多個選擇選項
- 16. 多個選擇選項
- 17. 選擇多個選項
- 18. 接收在外殼的選擇結果
- 19. 外殼腳本:打印選定的文本中字符串
- 20. jQuery - 防止在選擇多個選項中取消選擇
- 21. 在選擇框中動態選擇多個選項
- 22. 從文本文件中提取外殼腳本自動完成選項
- 23. 如何在多個選項中選擇選項數據屬性
- 24. Sql腳本 - 選擇多個表
- 25. 在collection_select軌選擇多個選項
- 26. 外殼腳本UI
- 27. 在Joomla中選擇多個選項的多個選擇列表!插件
- 28. 比較在外殼腳本
- 29. 差異在外殼腳本
- 30. 多選擇選項
用戶如何進入他的選擇? '1 [ENTER] 3 [ENTER] 5 [ENTER]運行[ENTER]或[1,3,5 [ENTER]'?解析他的迴應並調用正確的功能。 –
用戶可以這樣輸入他的選擇:1,2,3 [ENTER] –
爲了回答以及未來讀者的好處:如果答案解決了您的問題,請點擊旁邊的大複選標記以接受它。它;如果您找到答案_helpful_,請點擊向上箭頭圖標(您可以同時執行這兩個操作),然後點擊投票。請參閱[相關幫助中心文章](http://stackoverflow.com/help/someone-answers)。如果您的問題尚未得到充分解答,請提供反饋。 – mklement0