2015-10-14 74 views
3

用一個簡單的AWS CLI查詢亂搞檢查lambda函數的存在和回聲關聯的角色,如果它存在:JMESPath查詢表達式

#!/bin/bash 

fname=$1 
role=$(aws lambda list-functions --query 'Functions[?FunctionName == `$fname`].Role' --output text) 

echo "$fname role: $role" 

然而,$ FNAME似乎正在解決到aws命令中的空字符串。我嘗試了逃避後面的蜱蟲,交換`以'和其他一系列顛簸編輯(是的,我在調用腳本時通過cl上的字符串:)

如何正確傳遞一個變量到一個bash腳本里面的JMESPath查詢中?

回答

8

由於整個JMESPath表達式都用單引號引起來,因此bash不會擴展變量$fname。爲了解決這個問題,你可以使用雙引號的值,然後使用單引號(raw string literals)爲$fname VAR:

aws lambda list-functions --query "Functions[?FunctionName == '$fname'].Role" --output text 
+0

完美。謝謝! – TomH

0

交換反引號爲單引號,並沒有爲我工作... :(

但逃避反引號工程:)

這裏是我的輸出:

aws elbv2 describe-listeners --load-balancer-arn $ELB_ARN --query "Listeners[?Port == '$PORT'].DefaultActions[].TargetGroupArn | [0]" 

aws elbv2 describe-listeners --load-balancer-arn $ELB_ARN --query "Listeners[?Port == \`$PORT\`].DefaultActions[].TargetGroupArn | [0]" 

「阿爾恩:AWS:elasticloadbalancing:AP-東南-2:1234567:targetgroup/XXX」