Bash Shell变量名与文本分开

你需要输出变量以及其他文本。引用变量要用到 $,但是该怎么区分变量名与紧随其后的其他文本呢?例如,你想要用 shell 变量作为文件名的一部分。

for FN in 1 2 3 4 5
do
    somescript /tmp/rep$FNport.txt
done

shell 会怎么理解这段代码?它会认为变量名从 $ 开始,到点号结束。换句话说,它将 $FNport 视为变量名,而非我们想要的 $FN

解决方案

使用完整的变量引用语法,不仅要包括 $,还要在变量名周围加上花括号。

somescript /tmp/rep${FN}port.txt

讨论

因为 shell 变量名中只能包含字母、数字以及下划线,所以很多时候并不需要使用花括号。任何空白字符或标点符号(下划线除外)都足以提示变量名的结束位置。但只要有疑问,就应该用花括号。

实际上,有人认为坚持使用花括号是一种好习惯,这样就不用考虑什么时候该用,什么时候不用,还能在整个脚本中保持写法一致。也有人觉得这样需要敲入的可用可不用的字符太多了,不但不好输入,还会让代码看起来很繁杂。说到底,这还是个人喜好问题。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!