我有这个 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
是可选的,因为它"
用于分隔的目的。