在bash中将两行输出分配给两个不同的变量

时间:2018-06-04 18:07:29

标签: bash amazon-web-services aws-iam

我正在编写一个Bash脚本,我必须为用户列出AWS访问密钥,然后将它们分配给变量。

用户可能有两个访问密钥。因此用户需要两个变量来存储这些键。

这是我到目前为止的路线:

aws iam list-access-keys --user-name "$user_name" --profile="$aws_key"  | grep -i accesskeyid | awk '{print $2}' | sed 's/"//g'

输出将是这样的:

 AKIAJS7KDACQRQ5FJWA
 AKIAICDDTVTMEAB6RM5Q

如何在Bash中将每个变量分配给自己的变量?

2 个答案:

答案 0 :(得分:2)

您可以使用参数替换在换行符上拆分字符串。 ${variable%$'\n'*}在最后一个换行符之前获取$variable值的部分,${variable#*$'\n'}获取第一个换行符之后的部分。

顺便说一句,Awk通常可以做grepsed可以做的任何事情。

variable=$(aws iam list-access-keys --user-name "$user_name" --profile="$aws_key"  |
awk 'tolower($0) ~ /accesskeyid/{gsub(/\"/,""); print $2}')

答案 1 :(得分:1)

您可以使用--query

作为aws命令的一部分进行处理
aws iam list-access-keys --user-name "$user_name" --profile="$aws_key" \
    --query 'AccessKeyMetadata[*].AccessKeyId' --output text

以制表符分隔的行返回ID,因此您可以执行类似

的操作
read -a vars <<< \
    $(aws iam list-access-keys --user-name "$user_name" --profile="$aws_key" \
    --query 'AccessKeyMetadata[*].AccessKeyId' --output text)

你得到一个包含变量的数组vars