其实这篇的内容没多少,如果自己在平时的编程过程中比较注意的话也不会碰到我下面的这个问题,但是,既然让我碰到了,那还是总结一下吧,方便以后参考,不要再在同样的问题上犯低级错误了。
$ cat xxxxxxxxx.sh #!/bin/bash dt=$(date +%Y%m%d -d '-1 day') host="www.ixyzero.com" echo $host_$dt.txt echo $host$dt.txt
# bash xxxxxxxxx.sh
20141124.txt
www.ixyzero.com20141124.txt
这里$host和$dt都是字符串变量,直接连接当然没问题,但是看上去不太好看,如果是想设置分隔符的话,也请不要使用下划线“_”否则就会像上面那种,无法识别$host_这样的变量(实际测试的时候发现,只要不使用:字母、数字、下划线作为分隔符,就不会造成上面的那种困扰,所以可以使用“-”替代“_”)
====
$ cat xxxxxxxxx.sh #!/bin/bash dt=$(date +%Y%m%d -d '-1 day') host="www.ixyzero.com" echo $host"$dt".txt echo $host$dt.txt
# bash xxxxxxxxx.sh
www.ixyzero.com20141124.txt
www.ixyzero.com20141124.txt
====
$ cat xxxxxxxxx.sh #!/bin/bash dt=$(date +%Y%m%d -d '-1 day') host="www.ixyzero.com" echo $host"$dt".txt echo $host"_"$dt.txt echo $host$dt.txt
# bash xxxxxxxxx.sh
www.ixyzero.com20141124.txt
www.ixyzero.com_20141124.txt
www.ixyzero.com20141124.txt
从上面的测试中可以看出,在Bash里,字符串连接是非常直接的,放在一起就是字符串连接;容易出问题的地方在于两个变量之间的连接,最好使用双引号分开,或是某个别的符号(比如我在设置某个路径为变量的时候,一般不会加上最后的”/”,方便后面字符串的连接)。
====
就算在shell脚本中指定:
date=201410*
如果是在命令行中的话,需要手动将201410*中的*进行转义(*);如果是在脚本中的话,直接使用$date即可。