Bash脚本移除指定文件扩展名无输出,求排查错误原因
问题分析与修复方案
你的脚本有两个核心问题导致无输出,同时还有功能不符合需求的问题,具体如下:
1. 注释语法错误
Bash 中单行注释必须使用 #,你在标注的行用了 //,这属于语法错误,会直接导致脚本解析失败并终止执行,所以没有任何输出。需要把这行的 // 改成 # 或者直接删除。
2. 硬编码扩展名,未使用用户输入变量
你的判断条件 [[ $file == *.txt ]] 固定死了只处理 .txt 文件,完全忽略了用户输入的 $extension 变量,不符合你“指定移除任意扩展名”的需求。应该改成匹配用户输入的扩展名格式:[[ $file == *."$extension" ]](注意扩展名前的点号,避免误匹配文件名中包含该字符串的文件)。
3. 可选优化(避免异常场景)
可以增加目录存在性检查,以及跳过非文件的条目,防止目录为空或不存在时输出无效内容。
修复后的完整脚本
#!/bin/bash echo "Enter an extension" read extension echo "Enter a directory" read directory # 检查目录是否存在 if [[ ! -d "$directory" ]]; then echo "Error: Directory $directory does not exist." exit 1 fi for file in "$directory"/*; do # 跳过非文件条目(比如目录为空时的"$directory/*"字符串) [[ -f "$file" ]] || continue if [[ $file == *."$extension" ]]; then echo "${file%.*}" else echo "$file" fi done
内容的提问来源于stack exchange,提问作者user18984687
相关产品推荐
相关产品推荐

