在Bash上调用命令变量

时间:2018-04-25 18:26:20

标签: linux bash

我无法调用应该带出命令输出的变量。

<script>

赞赏任何建议

3 个答案:

答案 0 :(得分:0)

将最终$(ipAddresses)替换为${ipAddresses}或仅"$ipAddresses",同时使用$()保存命令的输出。

检查Difference between ${} and $() in Bash

一个基本的例子:

#!/bin/sh

OUTPUT=$(uname -a)

echo "The output: $OUTPUT"

答案 1 :(得分:0)

变量赋值在shell中的=周围不能有空格。另外,你不想要单引号,你需要反引号或$()。单引号应仅适用于您的awk命令。您的awk也是不必要的复杂,并且您在打印时使用命令替换($()),但ipAdresses是变量,而不是命令。

尝试这样的事情:

#!/bin/bash

ipAddresses=$(ifconfig | sed 's/^ *//' | awk -F'[: ]' '/^ *inet addr:/{print $3}')
printf 'Sus direcciones IP son:\n%s\n' "$ipAddresses"

但这真的不便携。你没有提到你的操作系统,但我假设它是Linux,输出显示Ubuntu(addr之后inet输出ifconfig 1}}在我的Arch上,例如)。

如果您运行的是Linux,则可以改为使用grep

ipAddresses=$(ifconfig | grep -oP 'inet addr:\K\S+')

ip通常会替换ifconfig,所以请尝试这样做:

ipAddresses=$(ip addr | awk '/inet /{print $2}')

ipAddresses=$(ip addr | grep -oP 'inet \K\S+')

或者,删除尾随/N

ipAddresses=$(ip addr | grep -oP 'inet \K[\d.]+')

无论如何你都不需要变量,你可以:

printf 'Sus direcciones IP son:\n%s\n' "$(ip addr | awk '/inet /{print $2}')"

答案 2 :(得分:0)

我不确定你的意图,因为它们没有说明,所以我试图从剧本中猜出它们。

选项1 :您正在尝试将IP地址转换为变量ipAddresses,而这种情况并未发生。

首先更改long命令的单引号并调试命令。

选项2 :您要在变量ipAddresses中存储要在第二行执行的命令。

对于这两个选项,您需要在第二行使用$ipAdresses的变量值。 同时将作业修复为以下格式:

varName="value" # Note no spaces around = sign