2017-04-23 27 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