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

Assign two lines of output to two different variables in bash

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

一个用户可能有两个访问密钥。所以用户将需要两个变量来存储这些键。

这是我目前的路线:

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

输出会是这样的:

 AKIAJS7KDACQRQ5FJWA
 AKIAICDDTVTMEAB6RM5Q

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

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

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

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

您已经可以使用 --query:

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

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

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

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