【发布时间】:2020-12-31 13:08:09
【问题描述】:
我使用 create.sh 创建随机密码,其中每个密码都附加到一个数组中,我回显该数组,并将扩展版本(即 [@])提供给选择脚本。
在选择脚本中我无法访问数组。我回应了它的长度,它说是 1。即使当我打印时其中有 2 个元素被空格分隔。 现在我无法访问 1 的索引,因为只有索引 0 存在,它是由空格连接的所有元素。
提前致谢。 罗伯特
创建.sh
SEQ_LEN=1
MAX_CHAR=25
PASSWORDS=()
COUNTER=0
while getopts "x:l:" OPTION; do
case $OPTION in
x )
SEQ_LEN="$OPTARG"
;;
l )
MAX_CHAR="$OPTARG"
;;
\? )
echo "correct usage: create [-x] [SEQ_LEN] [-l] [MAX_CHAR]"
exit 1
;;
esac
done
shift "$(($OPTIND -1))"
for VAR in $(seq 1 $SEQ_LEN)
do
PASS=$(openssl rand -base64 48 | cut -c1-$MAX_CHAR)
PASSWORDS[$COUNTER]="$PASS"
COUNTER=$(($COUNTER +1))
done
echo "${PASSWORDS[@]}"
选择.sh
#!/bin/bash
ARRAY=()
INDEX=0
while getopts "a:i:" OPTION; do
case $OPTION in
a )
ARRAY=$OPTARG
;;
i )
INDEX=$OPTARG
;;
\? )
echo "Correct Usage: select [-a] [PASSWORD_ARRAY] [-i] [SELECTED_INDEX]"
;;
esac
done
echo "$ARRAY $INDEX" # looks identical
echo "${#ARRAY[@]}" # is 1 - should be 2
【问题讨论】:
-
shell 不能返回或传递数组。
echo打印数组的元素,其间有空格,根据您将其传递给另一个脚本的方式,它可以是一个带空格的字符串,也可以是多个单独的参数。但是根据定义,每个参数都是一个字符串(不是数组或其他任何复杂的东西)。