我的 shell 脚本运行带有 3 个或更多参数的 cli 命令,我无法提前指定将传递给脚本的参数数量。
cmd=$(aws emr add-steps --cluster-id ${1} --steps Type=CUSTOM_JAR, Jar=s3://elasticmapreduce/libs/script-runner/script-runner.jar, Name="$2",Args=[$3,$4,....])
我试图用 Args=[${@:3}]
替换 Args=[$3,$4,....]
但参数不是逗号-分开。
最佳答案
在命令替换中更改 IFS
的值并使用 $*
代替 $@
:
cmd=$(IFS=,;
aws emr add-steps --cluster-id ${$1} \
--steps Type=CUSTOM_JAR, \
Jar=s3://elasticmapreduce/libs/script-runner/script-runner.jar, \
Name="$2",Args=["${*:3}"])
IFS=,
之后的分号是可选的,只要对 aws
的调用在下一行开始,而不是在赋值之后立即开始。
${$1}
是一个语法错误。
关于linux - Shell:如何从多个参数创建列表变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44028781/