无法遍历目录文件:glob路径未展开导致文件名识别异常
解决办法
问题出在shell环境不支持bash特性或脚本执行方式错误,导致~/*.yaml未被正确展开为匹配的文件路径,反而被当作字面文件名处理。以下是具体修复方案:
给脚本添加正确的shebang开头:
在脚本第一行加入#!/bin/bash,确保系统用bash执行脚本,这样~的通配展开、nullglob这类bash专属特性才能生效。修改后的脚本示例:#!/bin/bash shopt -s nullglob for f in ~/*.yaml; do echo "$f" some_commands "$f" done强制用bash运行脚本:
如果之前是通过sh your_script.sh执行脚本,改成bash your_script.sh,直接指定用bash环境运行。替换
~为$HOME(兼容更多shell):
若需要脚本在非bash的POSIX兼容shell中也能运行,可把~换成$HOME,它在多数shell里都能正确展开为用户主目录:for f in "$HOME"/*.yaml; do echo "$f" some_commands "$f" done
补充说明:nullglob仅在bash环境下有效,它的作用是当没有匹配到任何yaml文件时,让~/*.yaml展开为空,避免循环因不存在的文件名报错;若未开启该选项,目录无yaml文件时,循环会把~/*.yaml当作一个不存在的文件名处理,这也是你之前报错的核心原因之一。
内容的提问来源于stack exchange,提问作者user971741
相关产品推荐
相关产品推荐

