arrays - 如何在bash中将数组作为参数?
问题描述
我使用 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
解决方案
感谢您的回答和有用的建议。既然 bash 太棒了,事实证明你可以做到
ARRAY=( $OPTARG )
它用“”分割 $OPTARG 字符串,把它变成一个“数组”
“显然”您可以只 for 循环遍历字符串并附加到一个新变量,该变量被声明为 -a 数组。来源 如下图:
sentence="This is a sentence."
for word in $sentence
do
echo $word
done
推荐阅读
- r - 多项式回归不产生最佳拟合线
- flutter - 从经过身份验证的用户在 Firebase 中创建用户
- c++ - istringstream,这里的 num1 和 num2 发生了什么?
- django - 如何处理在同一台硬件计算机上工作的多用户的登录/注销流程
- mysql - 在执行 mysql.server 启动时无法打开 unix 套接字锁定文件 /tmp/mysql.sock.lock
- gis - 在 Netlogo 中显示多个栅格数据集
- asp.net - 绕过登录对话框通过 vb/asp 代码自动登录网站
- javascript - 每次幻灯片显示视频时如何防止视频请求?
- snakemake - Snakemake:作为输入的函数未按预期工作(带有 KeyError 的 InputFunctionException)
- typescript - 在类型中使用元组而不是联合数组