SC2207 Bash 来自子外壳的数组分配未按预期拆分
SC2207 Bash array assignment from subshell not splitting as expected
我一直在使用以下方法填充数组:
AWS_STS_CREDS=( $(aws sts ...) )
Prefer mapfile or read -a to split command output
但是建议没有按预期工作。
IFS=" " read -r -a AWS_STS_CREDS <<< "$(
aws sts assume-role \
--role-arn ${AWS_ROLE_ARN} --role-session-name ${AWS_SESSION_NAME} \
--query '[Credentials.AccessKeyId,Credentials.SecretAccessKey,Credentials.SessionToken]' \
--output text
)"
echo "Array contains ${#AWS_STS_CREDS[@]} elements"
#> Array contains 1 elements
echo "${AWS_STS_CREDS[0]}"
#> ASIAV2R3U... 4gXdep/GN... FwoGZXI...
我也试过删除子命令周围的引号。
起初看起来好像设置 IFS 没有效果,但下面的工作:
IFS=" " read -r -a AWS_STS_CREDS <<< "$(echo '1 2 3')"
我忽略了一些东西,但我无法确定问题所在并且想了解行为。
根据@Cyrus 的建议,将子命令输出管道传输到 cat -A
清楚地表明它是制表符分隔的。表示为 ^I
echo "${AWS_STS_CREDS[0]}"
#> ASIAV2R3U...^I4gXdep/GN...^IFwoGZXI...
按如下方式修改脚本可以正常工作:
IFS=$'\t' read -r -a AWS_STS_CREDS <<< "$(
aws sts assume-role \
--role-arn ${AWS_ROLE_ARN} --role-session-name ${AWS_SESSION_NAME} \
--query '[Credentials.AccessKeyId,Credentials.SecretAccessKey,Credentials.SessionToken]' \
--output text
)"
echo "Array contains ${#AWS_STS_CREDS[@]} elements"
#> Array contains 3 elements
echo "${AWS_STS_CREDS[0]}"
#> ASIAV2R3U...
我一直在使用以下方法填充数组:
AWS_STS_CREDS=( $(aws sts ...) )
Prefer mapfile or read -a to split command output
但是建议没有按预期工作。
IFS=" " read -r -a AWS_STS_CREDS <<< "$(
aws sts assume-role \
--role-arn ${AWS_ROLE_ARN} --role-session-name ${AWS_SESSION_NAME} \
--query '[Credentials.AccessKeyId,Credentials.SecretAccessKey,Credentials.SessionToken]' \
--output text
)"
echo "Array contains ${#AWS_STS_CREDS[@]} elements"
#> Array contains 1 elements
echo "${AWS_STS_CREDS[0]}"
#> ASIAV2R3U... 4gXdep/GN... FwoGZXI...
我也试过删除子命令周围的引号。
起初看起来好像设置 IFS 没有效果,但下面的工作:
IFS=" " read -r -a AWS_STS_CREDS <<< "$(echo '1 2 3')"
我忽略了一些东西,但我无法确定问题所在并且想了解行为。
根据@Cyrus 的建议,将子命令输出管道传输到 cat -A
清楚地表明它是制表符分隔的。表示为 ^I
echo "${AWS_STS_CREDS[0]}"
#> ASIAV2R3U...^I4gXdep/GN...^IFwoGZXI...
按如下方式修改脚本可以正常工作:
IFS=$'\t' read -r -a AWS_STS_CREDS <<< "$(
aws sts assume-role \
--role-arn ${AWS_ROLE_ARN} --role-session-name ${AWS_SESSION_NAME} \
--query '[Credentials.AccessKeyId,Credentials.SecretAccessKey,Credentials.SessionToken]' \
--output text
)"
echo "Array contains ${#AWS_STS_CREDS[@]} elements"
#> Array contains 3 elements
echo "${AWS_STS_CREDS[0]}"
#> ASIAV2R3U...