![转义_$(下划线和美元符号)](https://linux22.com/image/106041/%E8%BD%AC%E4%B9%89_%24%EF%BC%88%E4%B8%8B%E5%88%92%E7%BA%BF%E5%92%8C%E7%BE%8E%E5%85%83%E7%AC%A6%E5%8F%B7%EF%BC%89.png)
我有这个 Bash 脚本
for i in 1 2 3
do
for j in 4 5 6
do
echo "hello_$i_$j"
done
done
但它打印
你好_4
你好_5
你好_6
三次,而(你可能会猜到)我想要你好_1_4,你好_1_5, ETC。
仅转义下划线或仅转义美元符号不起作用。有任何想法吗?
谢谢!
答案1
将行:添加set -u
到代码顶部。然后重新运行,看看会得到什么。
变量未绑定的错误i_
,意味着未在任何地方定义。现在为什么 bash 谈论这个变量i_
?您没有在任何地方定义它。仔细查看您的 echo 语句:"hello_$i_$j"
$i 后面的下划线被视为变量,i_
因为_
它是有效的变量名称标识符字符。
因此,为了防止 bash 这样做,您需要将变量名称括在大括号中{}
,例如 as,echo "Hello_${i}_${j}"
大括号可防止变量名称溢出并与_
.注意:变量上的大括号$j
是可选的,因为它"
用于分隔的目的。