shell unix-bash中的Concat变量(日期)和字符串

shell unix-bash中的Concat变量(日期)和字符串,bash,shell,unix,Bash,Shell,Unix,我正在尝试压缩一个变量(日期)和字符串,以获得一个具有当前日期名称的文件 我的密码 days="$(date +"%Y%m%d_%H%M")" echo "SKIP" > ${days}_EMERGENCY.txt 但是当我运行时,我会得到一个带有?在文件名中,如下所示: 我做错什么了吗 编辑 看看这个符号?代表\r-可能是因为我在记事本上写东西,然后通过ftp上传.sh脚本 编辑2 在本地机器上尝试使用vi-现在情况更糟。 它在我的系统(OS X)上工作,即使到处都有双引号。对于我使

我正在尝试压缩一个变量(日期)和字符串,以获得一个具有当前日期名称的文件

我的密码

days="$(date +"%Y%m%d_%H%M")"
echo "SKIP" > ${days}_EMERGENCY.txt
但是当我运行时,我会得到一个带有?在文件名中,如下所示:

我做错什么了吗

编辑

看看这个符号?代表\r-可能是因为我在记事本上写东西,然后通过ftp上传.sh脚本

编辑2

在本地机器上尝试使用vi-现在情况更糟。

它在我的系统(OS X)上工作,即使到处都有双引号。对于我使用的变体:

$> days="$(date +'%Y%m%d_%H%M')"
$> echo $days
20160601_1051
$> echo "SKIP" > ${days}_EMERGENCY.txt
$> ll ${days}_EMERGENCY.txt
-rw-r--r--  1 user  team  5 Jun  1 10:52 20160601_1051_EMERGENCY.txt

尝试删除第一个变量赋值中多余的双引号

$ days=$(date +%Y%m%d_%H%M)
$ echo $days #see what output will get?
$ echo "SKIP" > ${days}_EMERGENCY.txt

我猜你的vi已经完成了整个文件DOS风格,因此在echo语句的末尾会有另一个回车符

请尝试dos2unix或使用允许您更改行尾样式的编辑器

sed -i "s/$( printf '\015' )//g" yourscript

请像我一样试一下。我添加了echo输出和文件列表。我觉得还可以。我很确定我的代码片段中没有任何错误,但输出仍然是这个。那么您的echo$days输出是什么?参见@alijandro的简单回答。也许你复制了印刷引号而不是ASCII引号字符?或者内部有一个零宽度的unicode字符?命令上的hextump或xxd应该显示。像这样:
echo'echo“$(日期+%Y%m%d_%H%m”)”| hextump
我想可能是插入了排版引号或显示宽度为零的字符。请按照我在下面的评论中的建议尝试下面的答案建议。是GNU bash和哪个Unix吗?@sjsam yes GNU bash on linux echo${days}\u EMERGENCY.txt的结果是什么?来了!这就是问题所在!有时,在end语句中添加分号也可以快速修复未解决的编辑环境;-)@Dilettant,很好的建议,但是“通常”shell程序员不使用分号,并且脚本中可能有包含不完整(续)语句的行,这也会使错误的CR出现问题,通常我认为它甚至以
解释器未找到开始,因为它尝试使用shebang中的
/bin/bash^M
。。。