将输出分配给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中的变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将shell命令的输出分配给变量[重复]

将 os.system 的输出分配给一个变量并防止它显示在屏幕上[重复]

否定一个布尔变量并将其分配给一个新变量[重复]

将函数的输出分配给R中的两个变量

如何将插入的输出值分配给 sql server 中的变量? [复制]

通过回声管道将python变量(字符串)传递给bash命令[重复]