转义 _$(下划线和美元符号)

Jas*_*son 5 bash shell-script escape-characters

我有这个 Bash 脚本

for i in 1 2 3
do
    for j in 4 5 6
    do
        echo "hello_$i_$j"
    done
done
Run Code Online (Sandbox Code Playgroud)

但它打印

你好
_4
你好_5你好_6

三次,而(你可能猜到)我想要hello_1_4hello_1_5等。

仅转义下划线或仅转义美元符号不起作用。有任何想法吗?

谢谢!

小智 11

将行:添加set -u到代码的顶部。然后重新运行,看看你得到了什么。

变量i_未绑定的错误,意味着未在任何地方定义。现在为什么 bash 谈论这个变量i_?你没有在任何地方定义它。仔细查看您的 echo 语句:"hello_$i_$j"$i 之后的下划线被视为变量,i_因为它_是一个有效的变量名称标识符字符。

因此,为了防止 bash 这样做,您需要将变量名称括在大括号中{},例如,echo "Hello_${i}_${j}"大括号可防止变量名称溢出并与_. 注意:变量$j上的大括号是可选的,因为它"用于分隔。