linux - Shell:如何从多个参数创建列表变量

标签 linux bash shell amazon-web-services amazon-emr

我的 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/

相关文章:

linux - 在 bash 中循环遍历文件中的行,而不使用标准输入

bash - 将文件内容作为 azure Devops 管道 docker 构建任务中的构建参数传递

linux - (标准输入) 1 : parse error

c++ - 无法创建项目,无法识别的命令行选项 libc++ 错误

bash - 为什么 bash 提示符(PS1)会附加 ghost 命令?

.net - 如何让 shell 脚本指向 .dll? ( docker 入口点)

linux - Bash - 需要使用 exit 然后调用另一个函数?

linux - bash shell 脚本,显示菜单驱动程序的输出

linux - Shell如何杀死一个进程并返回0

linux - 无法从 iptables NAT 后面的本地网络连接到外部 IP