将两行输出分配给 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 通常可以做 grep
和 sed
可以做的任何事情。
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
包含你的变量。
我正在编写一个 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 通常可以做 grep
和 sed
可以做的任何事情。
variable=$(aws iam list-access-keys --user-name "$user_name" --profile="$aws_key" |
awk 'tolower([=10=]) ~ /accesskeyid/{gsub(/\"/,""); print }')
您已经可以使用 --query
:
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
包含你的变量。