linux - IFCONFIG 值未传递到 shell 中的另一个变量

标签 linux bash shell awk grep

这是我的代码:

CONFIG= ifconfig lo;
MAC_ADDRESS="$("${CONFIG}" | awk '/HWaddr/ {print $NF}' | sed -e 's/://g')";
MAC_ADDRESS2="$("${CONFIG}" | awk '/HWaddr/ {print $NF}' | sed -e 's/://g')";

echo "$MAC_ADDRESS" 
echo "$MAC_ADDRESS2"

这里我试图设置ifconfig lo到一个变量中,然后尝试传递到另一个需要的地方。

所以我的期望是,它应该像下面这样通过

MAC_ADDRESS="$(ifconfig lo | awk '/HWaddr/ {print $NF}' | sed -e 's/://g')";
MAC_ADDRESS2="$(ifconfig lo | awk '/HWaddr/ {print $NF}' | sed -e 's/://g')";

这里我得到权限被拒绝的异常。还有其他可能的方法吗?

预期输出:

JUKUJSDJDJSJDJSJ
KIIPPSKKSKDKDKKS

最佳答案

注意:此答案假设 。其他 shell 有不同的行为。

<小时/>

如果您尝试类似的操作:

bash-4.2$ command="ls"
bash-4.2$ $command
bash-4.2$ "$command"

然后您会注意到在这两种情况下都执行了ls。但是,如果您尝试执行以下操作:

bash-4.2$ command="ls -l"
bash-4.2$ $command

将按预期工作(这在 中失败),但如果您像这样引用它

bash-4.2$ "$command"
bash: ls -l: command not found

失败了。

您尝试类似的操作,但您在命令替换 $(command) 中引用了该命令。

简而言之:不要

CONFIG= ifconfig lo;
MAC_ADDRESS="$("${CONFIG}" | awk '/HWaddr/ {print $NF}' | sed -e 's/://g')";

但是

CONFIG="ifconfig lo"
MAC_ADDRESS="$(${CONFIG} | awk '/HWaddr/ {print $NF}' | sed -e 's/://g')";

我还修复了 CONFIG 的定义,因为它需要 <双引号> 并且 符号 (=) 前后不允许有空格

关于linux - IFCONFIG 值未传递到 shell 中的另一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52778285/

相关文章:

linux - 错误 MySQL 说 : Documentation Cannot connect: invalid settings. [Ubuntu]

linux - 在没有 unistd.h 的情况下获取当前进程的进程 ID

linux - 我们能否将多次出现的字符串的行号捕获到变量中(仅最后一次出现)

bash - awk:如果满足条件,将字符串添加到这些行

bash - 使用 shell 脚本用点创建的目录名称

shell - 如何编写 shell 脚本,在当前日期中添加年月日

python-3.x - 如何使用p2p连接访问nat后面的Web服务器

linux - 确定 SCP 传输是否失败的最佳方法

linux - 从 Linux 中的另一个文件中删除包含多个字符串模式的文本文件中的行

linux - 从路径的子目录读取文件并将它们附加到一个文件