如何将命令行参数转换为bash脚本数组?
我想说:
./something.sh arg1 arg2 arg3
并将其转换为
myArray=( arg1 arg2 arg3 )
这样我就可以使用myArray在脚本中进一步使用。
这之前的SO帖子接近,但没有进入如何创建一个数组:我如何在Bash中解析命令行参数?
我需要将参数转换为常规bash脚本数组;我意识到我可以使用其他语言(例如Python),但需要在bash中这样做。我想我在寻找一个“追加”功能或类似的东西?
更新:我还想问如何检查零参数和分配默认数组值,感谢下面的答案,能够得到这个工作:
if [ "$#" -eq 0 ]; then
myArray=( defaultarg1 defaultarg2 )
else
myArray=( "$@" )
fi
实际上,参数列表可以用$1 $2…等。
这完全等价于:
${!i}
因此,参数列表可以通过set和${!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