如何在bash中连接包含文件中的字符串

时间:2014-09-26 19:24:29

标签: linux bash shell concatenation

我想要完成的是在bash中有一个中央配置文件,它定义了一些在不同bash文件中重用的变量。下面的示例尝试生成一个文件名,其中包含文件名中包含的当前日期以及另一个shell脚本中定义的变量。但是每当我尝试连接这个外部变量时,它都不起作用。我可以在任何其他情况下连接变量。

示例代码:

../配置/ vars.sh

#!/bin/bash
mysqlUser="backupuser"
mysqlPwd="fakePwd"
mysqlSocket="/var/run/mysqld/mysqld.sock"
mysqlPort="3306"
serverName="s01.catchyservername.com"

./ dbBackup.sh

#!/bin/bash
source ../config/vars.sh
tempName=$(date +"%Y%m%d.sql.gz")
fileName="mysqld_${mysqlPort}_${tempName}"
echo "mysqld_${mysqlPort}"
echo ${tempName}
echo ${fileName}

dbBackup.sh的输出

mysqld_3306
20140926.sql.gz
_20140926.sql.gz

正如您在回显“mysqld _ $ {mysqlPort}”时所看到的那样,我得到了预期的输出,但是当回显$ {fileName}时,整个字符串的前半部分都被忽略了。我误解了什么?

1 个答案:

答案 0 :(得分:2)

您的vars.sh文件可能是使用DOS / Windows文本编辑器创建的:

$ ./dbBackup.sh 
mysqld_3306
20140926.sql.gz
_20140926.sql.gz
$ dos2unix vars.sh 
dos2unix: converting file vars.sh to Unix format ...
$ 
$ ./dbBackup.sh 
mysqld_3306
20140926.sql.gz
mysqld_3306_20140926.sql.gz
$ 

如上所示,我使用dos2unix utility将行分隔符转换为Unix样式。