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