Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在bash中连接包含文件中的字符串_Linux_Bash_Shell_Concatenation - Fatal编程技术网

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

Linux 如何在bash中连接包含文件中的字符串,linux,bash,shell,concatenation,Linux,Bash,Shell,Concatenation,我试图实现的是在bash中有一个中心配置文件,它定义了一些在不同bash文件中重复使用的变量。下面的示例尝试生成一个文件名,该文件名中包含当前日期以及在另一个shell脚本中定义的变量。但是,每当我尝试连接这个外部变量时,它都不起作用。我可以在任何其他情况下连接变量 示例代码: ../config/vars.sh #!/bin/bash mysqlUser="backupuser" mysqlPwd="fakePwd" mysqlSocket="/var/run/mysqld/mysqld.so

我试图实现的是在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}
mysqld_3306
20140926.sql.gz
_20140926.sql.gz
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}
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
$ 

正如您在上面看到的,我使用将行分隔符转换为Unix样式。

它在我的环境中工作。成功了!非常感谢你。我正要把头撞到墙上。