我无法调用应该带出命令输出的变量。
<script>
赞赏任何建议
答案 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