Bash:通过用户输入获取数组值

Bash:通过用户输入获取数组值,bash,unix,Bash,Unix,我想输出一个带有文件名的数组,让用户选择要处理的文件 目前我有以下几点: 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 ec

我想输出一个带有文件名的数组,让用户选择要处理的文件

目前我有以下几点:

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]}"
但是
\u Patch
安装
只输出补丁数组的第一个值。
如何获取用户在命令行中输入的数组值?

很抱歉,这只是一个输入错误

尝试更改以下行:

read seleted_patch
致:

您可以使用select(专为此目的而设计的命令)

添加了超出范围选择的处理

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

天啊。失败。谢谢为什么它会将第一个值作为默认值输出?这是一个很好的问题-我对bash数组的复杂性不够熟悉-我通常认为,如果您使用这种高级shell脚本功能,那么使用真正的编程语言可能会更好。我猜一个未定义的变量(
$selected\u patch
在代码中)以某种方式引用了数组中的0位,但我不知道为什么。由于键入错误,
$selected\u patch
为空,
${patches[]}
${patches[0]}
的含义相同,只是
${patches[]}
给出:
${patches[]}:替换错误
Ups,抱歉。在ksh中测试,两者均有效@你真的在用bash吗?
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