我可以使用我想要的输出运行此命令:
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。
答案 0 :(得分:4)
CASS_INTERNAL=`ifconfig eth0 | grep HWaddr | awk '{print \$5}'`
echo $CASS_INTERNAL
您:
$CASS_INTERNAL
尝试将其作为命令运行。
答案 1 :(得分:4)
您没有打印变量,而是将其作为命令名运行。你正在寻找
echo "$CASS_INTERNAL"
(养成总是在变量替换上加双引号的习惯。)
更高级的外壳备注:在这种情况下无关紧要,但一般echo
可能会遇到一些特殊字符(-
和\\
)的问题,所以最好是使用以下更复杂但完全可靠的命令:
printf "%s\n" "$CASS_INTERNAL"
答案 2 :(得分:4)
不必使用grep
ifconfig eth0 | awk '/HWaddr/{print $5}'
答案 3 :(得分:1)
echo $CASS_INTERNAL
答案 4 :(得分:1)
好吧,你首先grep HWaddr,所以这一行的第五个字段是有问题的网络适配器的MAC地址 - 而不是你的本地IP地址。
其他人建议解决方案是简单地回显结果,这意味着如果此示例中的eth0在该行执行的那个时间点不可用,则它将不起作用。
根据我的理解,您希望将所需的命令行放在变量中,然后再评估 it 。此模式通常称为延迟评估,并使用内置的 eval 进行possible in bash:
#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