使用此 bash 腳本,用戶應該選擇一個目錄,并根據該目錄進行第二次選擇子目錄。
doSomething() {
echo "finish"
}
PS3="Select project: "
options=( )
for n in ./apps/*/; do
options =("$(basename "$n")")
done
select app in "${options[@]}"; do
PS3="Select application: "
options=()
for n in ./apps/$app/*/; do
appName=$(basename "$n")
if [[ "$appName" != *-e2e ]]; then
options =("$appName")
fi
done
select project in "${options[@]}"; do
doSomething $app $project
break
done
done
Select application我的問題是,即使在第二次選擇之后,提示也會保持活動狀態。我錯過了什么?
uj5u.com熱心網友回復:
我個人傾向于扁平化邏輯,因為擺脫嵌套回圈并不常見:
#!/bin/bash
shopt -s nullglob extglob
doSomething() { echo "finish"; }
PS3="Select project: "
options=( ./app/*/ )
options=( "${options[@]%/}" )
options=( "${options[@]##*/}" )
select app in "${options[@]}"
do
[[ -n "$app" ]] && break
done
PS3="Select application: "
options=( ./app/"$app"/!(*-e2e)/ )
options=( "${options[@]%/}" )
options=( "${options[@]##*/}" )
select project in "${options[@]}"
do
[[ -n "$project" ]] && break
done
doSomething "$app" "$project"
筆記:
我進行了設定
shopt -s nullglob,以使無與倫比的 glob 不會擴展到任何東西。我正在使用兩個 bash 引數擴展來擺脫陣列
/中每個元素的尾隨和路徑前綴。options我設定
shopt -s extglob使用 glob negation!(*-e2e)。
旁白:我不確定你為什么使用PS3而不是簡單的echo,有什么原因嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/517582.html
標籤:重击
上一篇:通過算術修改檔案行中的字串數字
下一篇:當我管道輸出時究竟會發生什么?
