gpt4 book ai didi

arrays - 使用数组参数创建 bash 选择菜单

转载 作者:行者123 更新时间:2023-12-02 01:01:16 27 4
gpt4 key购买 nike

我有一个名为 createmenu 的函数。这个函数将一个数组作为第一个参数。第二个参数是数组的大小。

然后我想使用该数组的元素创建一个选择菜单。这是我目前所拥有的:

用给定的数组创建菜单

createmenu ()
{
echo $1
echo "Size of array: $2"
select option in $1; do
if [ $REPLY -eq $2 ];
then
echo "Exiting..."
break;
elif [1 -le $REPLY ] && [$REPLY -le $2-1 ];
then
echo "You selected $option which is option $REPLY"
break;
else
echo "Incorrect Input: Select a number 1-$2"
fi
done
}

这是函数调用的示例:

createmenu ${buckets[*]} ${#buckets[@]}

如何使用参数数组的元素作为选项来创建此选择菜单?

最佳答案

我的建议是颠倒参数的顺序(尽管您甚至不需要长度参数,但我们会讲到),然后将数组作为位置参数传递给函数。

createmenu ()
{
arrsize=$1
echo "Size of array: $arrsize"
echo "${@:2}"
select option in "${@:2}"; do
if [ "$REPLY" -eq "$arrsize" ];
then
echo "Exiting..."
break;
elif [ 1 -le "$REPLY" ] && [ "$REPLY" -le $((arrsize-1)) ];
then
echo "You selected $option which is option $REPLY"
break;
else
echo "Incorrect Input: Select a number 1-$arrsize"
fi
done
}

createmenu "${#buckets[@]}" "${buckets[@]}"

请注意,我还修复了函数中的几个错误。也就是说,您错过了 [ 和第一个参数之间的一些空格,并且 [ 不是算术上下文,因此您需要强制使用一个来使您的数学工作)。

但是回到我之前关于根本不需要长度参数的评论。

如果您正在为数组元素使用位置参数,那么您已经在 $# 中有了长度...并且可以直接使用它。

createmenu ()
{
echo "Size of array: $#"
echo "$@"
select option; do # in "$@" is the default
if [ "$REPLY" -eq "$#" ];
then
echo "Exiting..."
break;
elif [ 1 -le "$REPLY" ] && [ "$REPLY" -le $(($#-1)) ];
then
echo "You selected $option which is option $REPLY"
break;
else
echo "Incorrect Input: Select a number 1-$#"
fi
done
}

createmenu "${buckets[@]}"

关于arrays - 使用数组参数创建 bash 选择菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28325915/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com