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

标签 linux bash shell concatenation

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

示例代码:

../config/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} 时,字符串的整个前半部分都被忽略了。我误会了什么?

最佳答案

您的 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 样式。

关于linux - 如何连接bash中包含文件中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26066895/

相关文章:

linux - 增加 Amazon EBS 卷的大小 : "Unknown label"

linux - 如何合并文件中的特定列?

linux - 以自然方式对制表符分隔的文本文件的字母数字和数字列进行排序

python - 从 Alpine Linux Docker 连接到 MS SQL 时遇到问题

linux - 对目录中的文件使用 wc 后排序

python - 通过双击 .desktop 文件来运行 shell 脚本来启动 python 脚本

linux - 用于循环命令行开关和参数的 Shell 脚本

java - 如何添加名为: `-DurlParams=intent=REGULAR&auto=w1` 的java系统属性

node.js - 如何在 node.js 中处理标准输出

linux - 在 Bash 中执行 TAR 失败