将命令行参数转换成Bash中的数组
如何将命令行参数转换为bash脚本数组?
我想要这个:
./something.sh arg1 arg2 arg3
并将其转换为
myArray=( arg1 arg2 arg3 )
以便我可以使用myArray在脚本中进一步使用。
这个以前的SOpost接近,但没有进入如何创build一个数组: 如何parsingBash中的命令行参数?
我需要将参数转换成一个常规的bash脚本数组; 我意识到我可以使用其他语言(例如Python),但需要在bash中执行此操作。 我想我正在寻找一个“追加”function或类似的东西?
更新:我也想问如何检查零参数,并分配一个默认的数组值,并感谢下面的答案,能够得到这个工作:
if [ "$#" -eq 0 ]; then myArray=( defaultarg1 defaultarg2 ) else myArray=( "$@" ) fi
其实你的命令行参数实际上已经像一个数组了。 至less,你可以把$@
variables看作一个数组。 也就是说,你可以把它转换成一个像这样的实际数组:
myArray=( "$@" )
如果你只是想input一些参数并把它们input到$@
值中,使用set
:
$ set -- apple banana "kiwi fruit" $ echo "$#" 3 $ echo "$@" apple banana kiwi fruit
理解如何使用参数结构在POSIX sh中是特别有用的,它没有其他任何东西像数组。
也许这可以帮助:
myArray=("$@")
你也可以通过省略'in'来遍历参数:
for arg; do echo "$arg" done
将是等同的
for arg in "${myArray[@]}"; do echo "$arg" done
其实参数列表可以用$ 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
这转化为更简单的expression式:
[ "$#" == "0" ] && set -- defaultarg1 defaultarg2
这是另一个用法:
#!/bin/bash array=( "$@" ) arraylength=${#array[@]} for (( i=1; i<${arraylength}+1; i++ )); do echo "${array[$i-1]}" done
更容易,但你可以直接运行$ @;)
这里是如何直接从提示中传递一个参数列表:
function echoarg { for stuff in "$@" ; do echo $stuff ; done ; } echoarg Hey Ho Lets Go Hey Ho Lets Go