Shell: 如何从多个参数创建一个列表变量
Shell: how to create a list variable from several args
我有 shell 脚本运行带有 3 个或更多参数的 cli 命令,我无法提前指定将传递给脚本的参数数量。
cmd=$(aws emr add-steps --cluster-id --steps Type=CUSTOM_JAR, Jar=s3://elasticmapreduce/libs/script-runner/script-runner.jar, Name="",Args=[,,....])
我试图用 Args=[${@:3}]
替换 Args=[,,....]
但参数不是逗号分隔的。
您可以使用:
Args=$(printf "%s," "${@:3}")
打印从第 3 个参数开始的所有参数,所有参数都以逗号结尾。 (会有一个尾随逗号)
如果你想避免尾随逗号,那么使用一个变量来存储 printf
输出和 trim 结束 ,
作为这个代码:
printf -v args "%s," "${@:3}"
Args="${args%,}"
在命令替换中更改 IFS
的值并使用 $*
代替 $@
:
cmd=$(IFS=,;
aws emr add-steps --cluster-id ${} \
--steps Type=CUSTOM_JAR, \
Jar=s3://elasticmapreduce/libs/script-runner/script-runner.jar, \
Name="",Args=["${*:3}"])
IFS=,
后的分号是可选的,只要对 aws
的调用从下一行开始,而不是在赋值后立即开始。
顺便说一下,${}
是一个语法错误。
我有 shell 脚本运行带有 3 个或更多参数的 cli 命令,我无法提前指定将传递给脚本的参数数量。
cmd=$(aws emr add-steps --cluster-id --steps Type=CUSTOM_JAR, Jar=s3://elasticmapreduce/libs/script-runner/script-runner.jar, Name="",Args=[,,....])
我试图用 Args=[${@:3}]
替换 Args=[,,....]
但参数不是逗号分隔的。
您可以使用:
Args=$(printf "%s," "${@:3}")
打印从第 3 个参数开始的所有参数,所有参数都以逗号结尾。 (会有一个尾随逗号)
如果你想避免尾随逗号,那么使用一个变量来存储 printf
输出和 trim 结束 ,
作为这个代码:
printf -v args "%s," "${@:3}"
Args="${args%,}"
在命令替换中更改 IFS
的值并使用 $*
代替 $@
:
cmd=$(IFS=,;
aws emr add-steps --cluster-id ${} \
--steps Type=CUSTOM_JAR, \
Jar=s3://elasticmapreduce/libs/script-runner/script-runner.jar, \
Name="",Args=["${*:3}"])
IFS=,
后的分号是可选的,只要对 aws
的调用从下一行开始,而不是在赋值后立即开始。
${}
是一个语法错误。