![使用撇号在命令外创建变量的语法](https://linux22.com/image/1013324/%E4%BD%BF%E7%94%A8%E6%92%87%E5%8F%B7%E5%9C%A8%E5%91%BD%E4%BB%A4%E5%A4%96%E5%88%9B%E5%BB%BA%E5%8F%98%E9%87%8F%E7%9A%84%E8%AF%AD%E6%B3%95.png)
菜鸟级别:语法、正则表达式和 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 中的代码格式化提供的语法高亮功能实际上有助于注意到这一点。带引号的字符串显示为红色,而未带引号的字符串显示为黑色。