3

我可以很好地运行这个命令,得到我想要的输出:

ifconfig eth0 | grep HWaddr | awk '{print $5}'

但是,当我将命令设置为变量并打印变量时,出现错误:

CASS_INTERNAL=`ifconfig eth0 | grep HWaddr | awk '{print \$5}'`
$CASS_INTERNAL

my internal xxx ip: command not found

奇怪的是——我的内部 IP 居然出现了。我该如何解决这个问题而不会出错?没关系,但我使用的是最新版本的 Ubuntu。

4

5 回答 5

4

您没有打印变量,而是将其作为命令名运行。您正在寻找

echo "$CASS_INTERNAL"

(养成总是在变量替换周围加上双引号的习惯。)

更高级的shell注意:在这种情况下没关系,但通常echo会遇到一些特殊字符(-\\),所以最好使用以下更复杂但完全可靠的命令:

printf "%s\n" "$CASS_INTERNAL"
于 2010-07-20T22:39:40.780 回答
4

不必使用grep

ifconfig eth0 | awk '/HWaddr/{print $5}'
于 2010-07-20T23:57:39.257 回答
3
CASS_INTERNAL=`ifconfig eth0 | grep HWaddr | awk '{print \$5}'`
echo $CASS_INTERNAL

您的:

$CASS_INTERNAL

将尝试将其作为命令运行。

于 2010-07-20T22:36:35.450 回答
1

你可能想要吗

echo $CASS_INTERNAL
于 2010-07-20T22:38:20.710 回答
0

好吧,您首先 grep 获取 HWaddr,因此这一行的第五个字段是相关网络适配器的 MAC 地址 - 而不是您的本地 IP 地址。

其他人建议解决方案是简单地回显结果,这意味着如果此示例中的 eth0 在执行该行的时间点不可用,它将无法工作。

据我了解,您希望将所需的命令行放在一个变量中,然后稍后对其进行评估。这种模式通常称为惰性求值,并且在 bash 中通过使用eval内置函数成为可能:

#put the desired command in variable
CASS_INTERNAL='ifconfig eth0 | grep HWaddr | awk "{print \$5}"'

# ....

#at later on - evaluate its contents!
eval $CASS_INTERNAL
11:22:33:aa:bb:cc
于 2010-07-20T23:24:02.180 回答