Bash中调用存储命令输出的变量失败问题求助
解决Bash脚本无法获取命令输出的问题
我来帮你搞定这个脚本的问题,你遇到的核心问题是变量赋值和命令替换的用法不对,咱们一步步修正:
问题点分析
- 变量赋值的空格问题:Bash里变量赋值时,
=两边绝对不能加空格!你写的ipAddresses = '...'会被系统当成要执行ipAddresses命令并传参数=和后面的字符串,直接就报错了。 - 命令替换用错了方式:你用单引号把命令包起来,变量里存的只是命令文本,不是命令执行后的结果。要获取命令输出,得用
$(命令)这种命令替换语法。 - 调用变量的方式错误:最后echo的时候你写了
$(ipAddresses),这会把ipAddresses当成命令去执行,但它是个变量,应该直接用$ipAddresses来引用。
修正后的完整脚本
#!/bin/bash # 修正变量赋值和命令替换,正确获取IP地址输出 ipAddresses=$(ifconfig | awk -v OFS=": " -v RS= '$1!="lo" && split($0, a, /inet addr:/) > 1{sub(/ .*/, "", a[2]); print $1, a[2]}') echo -e "Sus direcciones IP son: \n $ipAddresses"
额外推荐:适配现代Linux系统的版本
很多新发行版已经弃用ifconfig了,改用ip命令更稳妥,给你个替代版本:
#!/bin/bash # 使用ip命令获取非回环IP地址 ipAddresses=$(ip addr show | awk '/inet / && !/127.0.0.1/ {split($2, a, "/"); print $NF, a[1]}') echo -e "Sus direcciones IP son: \n $ipAddresses"
内容的提问来源于stack exchange,提问作者Andres Julia
相关产品推荐
相关产品推荐

