如何将命令行参数转换为bash脚本数组?
我想接这个电话
./something.sh arg1 arg2 arg3
并将其转换为
myArray=( arg1 arg2 arg3 )
这样我就可以在脚本中进一步使用myArray。
上一篇SO文章很接近,但没有详细介绍如何创建阵列:How do I parse command line arguments in Bash?
我需要将参数转换为一个常规的bash脚本数组;我意识到我可以使用其他语言(例如Python),但需要在bash中完成这一点。我猜我正在寻找一个"append"函数或类似的东西?
UPDATE:我还想问一下如何检查零参数并分配一个默认数组值,多亏了下面的答案,我才能让它工作起来:
if [ "$#" -eq 0 ]; then
myArray=( defaultarg1 defaultarg2 )
else
myArray=( "$@" )
fi
7条答案
按热度按时间xxls0lw81#
实际上你的命令行参数已经 * 几乎 * 像一个数组了。至少,你可以把
$@
变量当作一个数组来对待。也就是说,你可以把它转换成一个实际的数组,如下所示:如果只想输入一些参数并将其输入到
$@
值中,请使用set
:理解如何使用参数结构在POSIX sh中特别有用,因为它没有数组这样的东西。
pobjuy322#
也许这能帮上忙:
你也可以通过省略“in”来迭代参数:
将等同于
4uqofj5v3#
实际上,参数列表可以使用
$1 $2 ...
等进行访问。它完全等同于:
因此,参数列表可以随set而改变,
${!i}
是访问它们的正确方法:x一个一个一个一个x一个一个二个x
对于您的特定情况,可以使用此函数(不需要数组)来设置参数列表(如果未给定任何参数):
它可以转化为更简单的表达式:
2skhul334#
下面是另一种用法:
puruo6ea5#
更简单不过,您可以直接在
$@
上操作;)下面是如何从提示符直接传递一个参数列表:
3z6pesqy6#
双引号的重要性值得强调。假设一个参数包含空格。
代码:
输出:
chhkpiq47#
数组和$@实际上相同的并排视图。
代码:
输入:
输出: