I have shell script that runs a cli command with 3 or more args, i can’t specify in advance the number of args that will be passed to the script.
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,....])
i tried to replace Args=[$3,$4,....] by Args=[${@:3}] but the arguments are not comma-separated.
Advertisement
Answer
Change the value of IFS inside the command substitution and use $* instead of $@:
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}"])
The semicolon after IFS=, is optional as long as the call to aws begins on the next line, not immediately after the assignment.
${$1} is an syntax error, by the way.