Shell脚本中如何正确对比指定格式的文件名,解决执行报错问题
报错原因
- Shell 变量赋值时等号两侧不允许有空格,你写的
file1 = "xxx"会被系统识别为尝试执行名为file1的命令,而非变量赋值。 [是Shell的内置命令而非语法符号,命令和参数之间必须有空格分隔,你写的[$file1 == $file2]会把[和变量值拼接为一个整体字符串,系统会尝试执行这个不存在的命令,触发你遇到的报错。- 未用双引号包裹变量属于隐形风险,如果文件名包含空格、通配符等特殊字符时会出现解析错误。
正确的文件名对比写法
兼容所有POSIX标准Shell的通用写法
# 变量赋值等号两侧不能有空格 file1="my_random_forest_2021-08-11-094538.csv.zip" file2="my_random_forest_2021-08-11-094538.csv.zip" # [ 后和 ] 前必须加空格,变量用双引号包裹,用=做字符串对比兼容性更强 if [ "$file1" = "$file2" ]; then echo "matched" fi
Bash/Zsh等扩展Shell的简化写法
如果你确定脚本运行环境是Bash、Zsh这类支持扩展语法的Shell,可以用双层中括号写法,容错性更高,不需要刻意用双引号包裹变量:
file1="my_random_forest_2021-08-11-094538.csv.zip" file2="my_random_forest_2021-08-11-094538.csv.zip" if [[ $file1 == $file2 ]]; then echo "matched" fi
内容的提问来源于stack exchange,提问作者myamulla_ciencia
相关产品推荐
相关产品推荐

