GNU Coreutil Date在Bash CLI执行正常但脚本中输出异常问题
问题原因
给DATE变量赋值时错误使用了单引号包裹命令:Bash 中单引号会保留内部所有字符的字面含义,既不会执行其中的命令,也不会解析变量,因此最终DATE变量存储的是date +%Y%-m%d%j%M%S这个字符串本身,而非date命令的执行结果。
解决方案
使用 Bash 的命令替换语法捕获命令输出后赋值给变量,推荐优先使用$()格式的命令替换(兼容性、可读性均优于传统反引号写法,且支持命令嵌套)。
修正后的完整脚本示例:
#!/bin/bash # 正确捕获date命令输出赋值给变量 DATE=$(date +%Y%-m%d%j%M%S) echo $DATE # 备份逻辑(所有变量引用添加双引号,避免文件名含特殊字符时报错) if [ -f "$CSV_OUTFILE" ]; then echo "CSV file already exists. Renaming $CSV_OUTFILE to $CSV_OUTFILE.$DATE" mv "$CSV_OUTFILE" "$CSV_OUTFILE.$DATE" exit 1 fi
额外注意事项:
- 也可以使用反引号写法实现命令替换:
DATE=date +%Y%-m%d%j%M%S``,但嵌套使用时复杂度较高,更推荐$()写法 - 脚本首行添加
#!/bin/bash声明,可避免系统默认用sh等不兼容Bash特性的解释器执行脚本,导致语法异常
内容的提问来源于stack exchange,提问作者Roger
相关产品推荐
相关产品推荐

