今天在写Shell脚本的时候,遇见这么一个问题
原始的脚本大意如下:
#!/bin/bash
DATE=$1
echo "文件名=log_$DATE.tar.gz"
exit;
假定参数1为20200422,
此时可以正常输出:文件名=log_20200422.tar.gz
然后我给该脚本增加了 一个变量 FLAG
#!/bin/bash
DATE=$1
FLAG=$2
echo "文件名=log_$DATE_$FLAG.tar.gz"
exit;
假定参数2为A
此时输出为:文件名=log_A.tar.gz
咦,奇怪。第一个变量为啥不见了,明明就是参考着第一个变量的使用方法写的。后面仔细看了shell变量的使用方法教程,才知道
变量名外面的花括号是可选的,加不加都行,但是加花括号是为了帮助解释器识别变量的边界
就比如我遇到的这种情况,如果$DATE不加花括号的话,解释器就无法识别此次使用变量名的边界,导致输出为空。
改为如下即可
#!/bin/bash
DATE=$1
FLAG=$2
echo "文件名=log_${DATE}_$FLAG.tar.gz"
exit;
踩的shell小坑,记录一下。