我在一个文件夹的第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"/* )
你需要执行bash ls命令来完成这个操作:
ls | sed -n 773p
你当然可以将它写入一个变量中:
MY_FILE=$(ls | sed -n 773p)
而且,你也可以使用变量代替773。 希望能有所帮助。
echo
永远不会告诉你它们存在...) - Charles Duffytouch 'foo * bar' baz qux; files=( foo* ); echo ${files[@]}
与使用echo "${files[@]}"
的结果将更好地展示它们之间的差异(在bash上,而不是zsh;zsh打破了POSIX以提供更符合用户期望的行为)。 - Charles Duffyshopt -s globstar
使**
用于递归。 (顺便说一句,可以认为这应该是自己的问题-- 在某些解释中,它已经成为自己的问题;请参见f/e答案,教授有关递归查找特定扩展名的文件的技术) - Charles Duffy