我有一个名为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[@]}
如何使用参数数组的元素作为选项创建此选择菜单?
答案 0 :(得分:2)
我的建议是颠倒你的论点的顺序(虽然你甚至不需要长度参数,但我们会得到它),然后将数组作为位置参数传递给函数。 / p>
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[@]}"