转换命令行参数到击阵列(Convert command line arguments into an

2019-06-18 10:34发布

如何转换命令行参数为一个bash脚本阵列?

我想借此:

./something.sh arg1 arg2 arg3

并将其转换为

myArray=( arg1 arg2 arg3 )

所以,我可以使用myarray的为脚本中的进一步使用。

这以前SO后接近,但不进入如何创建一个数组: 我如何解析的命令行参数击?

我需要的参数转换为常规bash脚本阵列; 我知道我可以使用其他语言(Python的,例如),但需要为此在bash。 我想我正在寻找一个“追加”功能或类似的东西?

更新:我也想问如何检查零个参数,并指定一个默认的数组值,并且由于下面的答案,能得到这个工作:

if [ "$#" -eq 0 ]; then
  myArray=( defaultarg1 defaultarg2 )
else
  myArray=( "$@" )
fi

Answer 1:

其实你的命令行参数实际上像一个数组了。 至少,你可以把在$@变量很像一个阵列。 这就是说,你可以将其转换成这样一个实际的数组:

myArray=( "$@" )

如果你只是想输入一些参数并将其送入$@值,使用set

$ set -- apple banana "kiwi fruit"
$ echo "$#"
3
$ echo "$@"
apple banana kiwi fruit

了解如何使用论证结构是POSIX SH,其中有没有别的喜欢的阵列特别有用。



Answer 2:

也许这可以帮助:

myArray=("$@") 

你也可以通过“在”省略遍历参数:

for arg; do
   echo "$arg"
done

将相当于

for arg in "${myArray[@]}"; do
   echo "$arg"
done


Answer 3:

其实参数列表可以与被访问$1 $2 ...等等。
这是完全等同于:

${!i}

因此,参数列表可以用一组被改变,
${!i}是访问它们的正确方法:

$ set -- aa bb cc dd 55 ff gg hh ii jjj kkk lll
$ for ((i=0;i<=$#;i++)); do echo "$#" "$i" "${!i}"; done
12 1 aa
12 2 bb
12 3 cc
12 4 dd
12 5 55
12 6 ff
12 7 gg
12 8 hh
12 9 ii
12 10 jjj
12 11 kkk
12 12 lll

针对您的特殊情况下,这可以用于(无需阵列),设定的参数列表给出无时:

if [ "$#" -eq 0 ]; then
    set -- defaultarg1 defaultarg2
fi

它转换为这种更简单的表达:

[ "$#" == "0" ] && set -- defaultarg1 defaultarg2


Answer 4:

这里是另一个用法:

#!/bin/bash
array=( "$@" )
arraylength=${#array[@]}
for (( i=1; i<${arraylength}+1; i++ ));
do
   echo "${array[$i-1]}"
done


Answer 5:

然而,更方便,您可以直接操作$@ ;)

以下是如何直接从提示符下执行args来通AA列表:

function echoarg { for stuff in "$@" ; do echo $stuff ; done ; } 
    echoarg Hey Ho Lets Go
    Hey
    Ho
    Lets
    Go


Answer 6:

并排侧视图的阵列和$ @如何实际上是相同的。

码:

#!/bin/bash

echo "Dollar-1 : $1"
echo "Dollar-2 : $2"
echo "Dollar-3 : $3"
echo "Dollar-AT: $@"
echo ""

myArray=( "$@" )

echo "A Val 0: ${myArray[0]}"
echo "A Val 1: ${myArray[1]}"
echo "A Val 2: ${myArray[2]}"
echo "A All Values: ${myArray[@]}"

输入:

./bash-array-practice.sh 1 2 3 4

输出:

Dollar-1 : 1
Dollar-2 : 2
Dollar-3 : 3
Dollar-AT: 1 2 3 4

A Val 0: 1
A Val 1: 2
A Val 2: 3
A All Values: 1 2 3 4


文章来源: Convert command line arguments into an array in Bash