【问题标题】:IFCONFIG value is not passed into another variable in shell [closed]IFCONFIG 值未传递到 shell 中的另一个变量 [关闭]
【发布时间】:2018-10-12 11:10:39
【问题描述】:

这是我的一段代码:

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

【问题讨论】:

  • 能否请您尝试将"${CONFIG}" 更改为echo "$CONFIG" 一次,然后让我知道?
  • @RavinderSingh13 。问题不在于 echo 。我需要将此CONFIG 传递给MAC_ADDRESS
  • 请添加样本(不是实际地址)作为样本输入和您想要实现的样本预期输出?
  • @RavinderSingh13 我已经用示例输出更新了问题。你可以检查一下吗?
  • "ifconfig lo" 不是有效的命令名称;您想使用参数lo 运行命令ifconfig。此外,等号后不能有空格。 (将命令放入变量中充其量似乎是多余的,最坏的情况是引起疯狂的mywiki.wooledge.org/BashFAQ/050。)

标签: linux bash shell awk grep


【解决方案1】:

注意:此答案假定。其他 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 的定义,因为它需要 并且 -sign (=) 前后不允许有空格

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-07
  • 2016-11-29
  • 2017-11-07
  • 2012-01-07
相关资源
最近更新 更多