使用撇号在命令外创建变量的语法

使用撇号在命令外创建变量的语法

菜鸟级别:语法、正则表达式和 BASH 编程很糟糕,但正在学习和研究 Lin+

我想运行这个脚本但它显然不喜欢我的语法。

只是为了测试变量是否被正确创建,我正在回应输出,但稍后,将操纵变量以确定要连接到 /etc/network/interfaces 的静态 IP 文件以及要使用 NMAP 扫描哪个网络主机 IP 列表、从中获取日志等。

脚本如下:

#!/bin/bash
# Script to grab the System IP and Gateway Addresses and use them to
# determine which other scripts to run my network scans with

ip=$(ip a | grep 'global[ \t]' | awk '{print $2}')
gateway=$('route -n | grep 'UG[ \t]' | awk '{print $2}')

echo $ip
echo $gateway

done

输出如下:


./test: 11: ./test: Syntax error: Unterminated quoted string

当我将“”代替()时,如下所示:

ip=$"ip a | grep 'global[ \t]' | awk '{print $2}'"
gateway=$"'route -n | grep 'UG[ \t]' | awk '{print $2}'"

输出如下:

$ip a | grep 'global[   ]' | awk '{print }'
$'route -n | grep 'UG[  ]' | awk '{print }'

如果我删除 $,输出是一样的。它只打印带撇号的命令,而不输出该命令的结果。

我究竟做错了什么?

答案1

'您的路由命令前面似乎有一个不必要的字符。由于您的撇号数量为奇数,这会导致出现未终止的引号字符串错误消息。

改变

gateway=$('route -n | grep 'UG[ \t]' | awk '{print $2}')

gateway=$(route -n | grep 'UG[ \t]' | awk '{print $2}')

Stack Exchange 中的代码格式化提供的语法高亮功能实际上有助于注意到这一点。带引号的字符串显示为红色,而未带引号的字符串显示为黑色。

相关内容