这是我的代码:
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
答案 0 :(得分:0)
注意::此答案假定为bash。其他外壳具有不同的行为。
如果您尝试类似的事情:
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
的定义,因为它需要<双引号>,并且=
)之前和之后不允许有空格