#!/bin/bash
COUNTER=$#
until [ $COUNTER -eq 0 ]; do
args[$COUNTER]=\$$COUNTER
let COUNTER-=1
done
echo ${args[@]}
当我运行时,我得到以下结果
user@host:~/sandbox# ./script.sh first second third
$1 $2 $3
并且我希望它能回应出$ 1,$ 2和$ 3不是" $ 1"
的文本值我试图在bash中编写一个脚本,它将创建一个数组,该数组的大小与我给它的参数数量相同。
我期待
user@host:~/sandbox# ./script.sh alpha bravo charlie
alpha bravo charlie
或
user@host:~/sandbox# ./script.sh 23425 jasson orange green verb noun coffee
23425 jasson orange green verb noun coffee
所以,目标是制作
args[0]=$1
args[1]=$2
args[2]=$3
args[3]=$4
我拥有它的方式,$1,$2,$3
没有被插值,只是被读作文本字符串。
答案 0 :(得分:37)
您可以使用+=
运算符追加数组。
args=()
for i in "$@"; do
args+=("$i")
done
echo "${args[@]}"
这显示了如何进行追加,但获得所需结果的最简单方法是:
echo "$@"
或
args=("$@")
echo "${args[@]}"
如果您想保留现有方法,则需要!
使用args=()
for ((i=1; i<=$#; i++)); do
args[i]=${!i}
done
echo "${args[@]}"
:
{{1}}
来自Bash参考:
如果参数的第一个字符是感叹号(!),则a 引入了变量间接的级别。 Bash使用的值 由参数的其余部分形成的变量作为名称 变量;然后展开此变量,并在该变量中使用该值 其余的替换,而不是参数本身的值。 这被称为间接扩张。对此的例外是 下面描述的$ {!prefix}和$ {!name [@]}的扩展。该 感叹号必须紧跟左支撑以便 介绍间接。