将输出分配给Bash中的变量[重复]
Posted
技术标签:
【中文标题】将输出分配给Bash中的变量[重复]【英文标题】:Assign output to variable in Bash [duplicate] 【发布时间】:2012-02-02 23:46:02 【问题描述】:我正在尝试将 cURL 的输出分配给一个变量,如下所示:
#!/bin/sh
$IP=`curl automation.whatismyip.com/n09230945.asp`
echo $IP
sed s/IP/$IP/ nsupdate.txt | nsupdate
但是,当我运行脚本时,会发生以下情况:
./update.sh: 3: =[my ip address]: not found
我怎样才能将输出正确地输入$IP
?
【问题讨论】:
接受的答案是正确的,但是该示例与此处的示例之间还有另一个细微差别:如果传递给 echo 的 $IP var 没有用双引号括起来,它只会输出最后一行捕获 curl 输出。 谢谢@ChristopherHunter,我来这里就是为了找这个。为什么它会这样呢? @Amey 我不能确切地说出原因是什么,只是当你给它一个多行字符串作为参数时,这就是 echo 的行为。 【参考方案1】:在 shell 中,您不会在要分配的变量前面加上 $。只有在引用变量时才使用 $IP。
#!/bin/bash
IP=$(curl automation.whatismyip.com/n09230945.asp)
echo "$IP"
sed "s/IP/$IP/" nsupdate.txt | nsupdate
【讨论】:
有没有办法抑制curl
的输出和进度条?添加-silent
使$IP
为空...
@Dror, curl
将其嘈杂的输出发送到 stderr,因此在这样的脚本的情况下应该忽略进度条。尽管如此,--silent
或 -s
工作得很好。有问题请ask a question.
使用curl -s
禁用进度条和错误消息。
你可以随时重定向stderr
:IP=$(curl <url> 2>/dev/null)
使用 $() 语法查找我无法使用环境变量,例如而不是硬编码电子邮件,我想使用 $2, $3 作为变量。关于为什么这些不会呈现的任何想法?【参考方案2】:
与更复杂的东西相同...从实例中获取 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
【讨论】:
这正是我在我的 bash 脚本中所做的,你让我免于 apt-get install jq! 如何在 Windows 上做到这一点?如果我用os.system
替换$
,则INSTANCE_REGION 没有输出的值。
如何制作多行?以上是关于将输出分配给Bash中的变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章
将 os.system 的输出分配给一个变量并防止它显示在屏幕上[重复]