将输出分配给Bash中的变量

将输出分配给Bash中的变量,bash,curl,Bash,Curl,我试图将cURL的输出赋值到一个变量中,如下所示: #!/bin/sh $IP=`curl automation.whatismyip.com/n09230945.asp` echo $IP sed s/IP/$IP/ nsupdate.txt | nsupdate 但是,当我运行脚本时,会发生以下情况: 如何将输出正确地输入到$IP中?在shell中,您不会将$放在正在分配的变量前面。只有在引用变量时才使用$IP #!/bin/bash IP=$(curl automation.whati

我试图将cURL的输出赋值到一个变量中,如下所示:

#!/bin/sh
$IP=`curl automation.whatismyip.com/n09230945.asp`
echo $IP
sed s/IP/$IP/ nsupdate.txt | nsupdate
但是,当我运行脚本时,会发生以下情况:


如何将输出正确地输入到
$IP
中?

在shell中,您不会将$放在正在分配的变量前面。只有在引用变量时才使用$IP

#!/bin/bash

IP=$(curl automation.whatismyip.com/n09230945.asp)

echo "$IP"

sed "s/IP/$IP/" nsupdate.txt | nsupdate

与更复杂的内容相同…从实例中获取ec2实例区域

INSTANCE_REGION=$(curl -s 'http://169.254.169.254/latest/dynamic/instance-identity/document' | python -c "import sys, json; print json.load(sys.stdin)['region']")

echo $INSTANCE_REGION

是否有方法抑制
curl
的输出和进度条?添加
-silent
$IP
保留为空…@Dror,
curl
将其嘈杂的输出发送到stderr,因此在出现这样的脚本时应忽略进度条。尽管如此,
--silent
-s
工作正常。如果您遇到问题,请使用
curl-s
禁用进度条和错误消息。您可以始终重定向
stderr
IP=$(curl 2>/dev/null)
使用$()语法查找我无法使用env变量,例如,我想使用$2、$3作为变量,而不是硬编码电子邮件。你知道为什么这些不能渲染吗?这正是我在bash脚本中所做的,你让我不用去安装jq!如何在windows上执行此操作?如果我将
$
替换为
os.system
,则实例区域没有输出值。如何生成多行?公认的答案是正确的,但该示例与此处有另一个细微的区别:如果传递给echo的$IP var没有用双引号括起来,它将只输出捕获的卷曲输出的最后一行。谢谢@ChristopherHunter,我来这里只是为了找这个。为什么它会这样呢?@Amey我说不出确切的原因是什么,只是当你给它一个多行字符串作为参数时,echo就是这样的。
INSTANCE_REGION=$(curl -s 'http://169.254.169.254/latest/dynamic/instance-identity/document' | python -c "import sys, json; print json.load(sys.stdin)['region']")

echo $INSTANCE_REGION