bash noob在这里。我有一个bash命令,如果我从命令行正常执行,将返回一个ip地址:
kubectl get svc ssdl-web --namespace default -o jsonpath='{$.status.loadBalancer.ingress[0].ip}'
返回:
104.76.131.131
但是,如果我将命令存储在var中,然后执行它,答案会被换成撇号:
get_external_ip_cmd="kubectl get svc ssdl-web --namespace default -o jsonpath='{$.status.loadBalancer.ingress[0].ip}'" && echo $($(echo $get_external_ip_cmd))
'104.76.131.131'
我需要没有撇号的结果。
我敢肯定有一个简单的解释,但我不知道是什么。有人可以填写我吗?谢谢。
(我将命令存储在var中的原因是我想多次执行该命令)
答案 0 :(得分:1)
替换结果仅通过字符串拆分和glob扩展进行。它们不要进行引号删除(引号被视为文字,而不是句法),因此引号将传递给您的命令,而不是由shell使用。
这在BashFAQ #50中有详细讨论。最佳实践通常是使用函数而不是字符串来存储要多次调用的代码。 (在某些情况下,数组可能更合适;有关详细信息,请阅读FAQ。)
用您的代码定义一个函数如下:
get_external_ip() {
kubectl get svc ssdl-web \
--namespace default \
-o jsonpath='{$.status.loadBalancer.ingress[0].ip}'
}
然后以以下方式运行它:
get_external_ip