Bash

括號和引號內的變數擴展

  • October 17, 2015

在下面的腳本中,我似乎無法在第二個語句中使 $var1 擴展。我試過$var1,${var1}echo $var1. '$var1'它在幾組引號和括號內,我猜這是導致問題的原因。有任何想法嗎?

#!/bin/bash

# Get the AutoScalingGroupName for the NameNode ASG
var1=$(aws cloudformation list-stack-resources --stack-name abc123 | jq '.StackResourceSummaries[] | select(.ResourceType=="AWS::AutoScaling::AutoScalingGroup")' | jq '.PhysicalResourceId' | tr -d '"' | grep nn); echo $var1

var2=$(aws autoscaling describe-auto-scaling-instances | jq -r '.AutoScalingInstances[] | select(.AutoScalingGroupName == "$var1") | select(.AvailabilityZone == "us-east-1a") .InstanceId'); echo $var2

單引號中的變數不展開。試試這個…

var2=$(aws autoscaling describe-auto-scaling-instances | jq -r '.AutoScalingInstances[] | select(.AutoScalingGroupName == "'"$var1"'") | select(.AvailabilityZone == "us-east-1a") .InstanceId'); echo $var2

它包含在單引號中,因此無法擴展。

jq -r '.AutoScalingInstances[] | select(.AutoScalingGroupName == "$var1") ... .InstanceId'

關鍵部分是jq您實際上只向其傳遞單個參數的命令(注意命令的長紅色部分)。所以你的管道也沒有生效。您可以有選擇地用真正需要的引號將內容包裝起來。

引用自:https://unix.stackexchange.com/questions/219181