这是我的代码:
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
最佳答案
注意:此答案假设 bash 。其他 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
将按预期工作(这在 zsh 中失败),但如果您像这样引用它
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/