【发布时间】:2014-09-02 19:35:52
【问题描述】:
我在文件夹的第 773 个文件中遇到解析错误。是否可以在bash中打印文件名?
我试过用它来打印它,但它返回一个空白。
files=(/path/to/files)
echo "${files[773]}"
【问题讨论】:
我在文件夹的第 773 个文件中遇到解析错误。是否可以在bash中打印文件名?
我试过用它来打印它,但它返回一个空白。
files=(/path/to/files)
echo "${files[773]}"
【问题讨论】:
非常接近,但是您实际上需要做一个 glob 来将列表收集到您的数组中,而不是拥有一个只有一个元素的列表(父目录):
files=( /path/to/files/* )
echo "${files[772]}"
如果您想以一种以人类可读的方式表示不可打印字符的方式表示您的文件名,echo 是错误的工具。相反,请考虑:
printf '%q\n' "${files[772]}"
如果您的路径来自变量,请务必引用其扩展名,但不是全局字符:
files=( "$dir"/* )
【讨论】:
echo 将永远不会告诉你它们存在......)
touch 'foo * bar' baz qux; files=( foo* ); echo ${files[@]} 与 echo "${files[@]}" 相同将更好地展示差异(在 bash 上,而不是 zsh;zsh 打破 POSIX 以提供更符合用户期望的行为)。
shopt -s globstar 使 ** 用于递归。 (顺便说一句,可以说这应该是它自己的问题——在某些解释中,它已经是它自己的问题;请参阅recursively look for files with a specific extension 上教授该技术的 f/e 答案)