IFCONFIG值未传递到外壳中的另一个变量

时间:2018-10-12 11:10:40

标签: 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

1 个答案:

答案 0 :(得分:0)

注意::此答案假定为。其他外壳具有不同的行为。


如果您尝试类似的事情:

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的定义,因为它需要<双引号>,并且符号(=)之前和之后不允许有空格