2017-04-23 24 views
1

我想輸出一個包含文件名的數組,並讓用戶選擇要處理的文件。Bash:按用戶輸入獲取數組值

目前,我有以下幾點:

patches=($(ls $WORKING_DIR/PATCH_*)) 
echo "Select available Patch to apply" 
for i in "${!patches[@]}"; do 
    echo "$i"":" "${patches[$i]}" 
done 

echo "Line Number, followed by [ENTER]:" 

read seleted_patch 

echo "Patch to install:" "${patches[$selected_patch]}" 

_PatchInstall_只是輸出補丁數組的第一個值。 如何獲取用戶在命令行中輸入的數組值?

回答

1

對不起,但這只是一個錯字。

嘗試改變下面一行:

read seleted_patch 

要:

read selected_patch 
+0

Omg。失敗。謝謝! 爲什麼它輸出第一個值作爲默認值? – develth

+0

這是一個很好的問題 - 我對bash數組的複雜程度不夠熟悉 - 我通常認爲,如果您使用了這種高級shell腳本功能,那麼使用真正的編程語言可能會更好。我猜想一個未定義的變量(代碼中的'$ selected_pa​​tch')以某種方式引用數組中的0位置,但我不知道爲什麼。 –

+0

由於錯字'$ selected_pa​​tch'是空的,'$ {patches []}'與'$ {patches [0]}'具有相同的含義' – ULick

1

您可以使用select(正是爲此目的設計的命令)

PS3= "Select available Patch to apply " 
select patch in $WORKING_DIR/PATCH_*; do 
    echo "Patch to install: $patch" 
    break; 
done 

添加了處理的超出範圍選擇

select patch in $WORKING_DIR/*; do 
    if [[ ! $patch ]]; then 
     echo "Selection out of range" 
     continue 
    fi 
    if [[ $REPLY = 'q' ]]; then 
     echo "Quit selection" 
     break 
    fi 
    echo "Patch to install: $patch" 
    break; 
done