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
。。。