Bash: ls 无法访问使用引号的路径

Bash: ls cannot access path that uses quotes

我有这样一行。它因错误而中断,没有这样的文件或目录。

LB=$(ls "$f *.backup" | sort --reverse | head -n 1)

如果我这样做,它有点管用,只是吐出错误的文件名:

LB=$(ls $f *.backup | sort --reverse | head -n 1)

我该如何解决?

双引号变量和 space,不要引号通配符。

"$f "*.backup

文件名扩展通配符不在引号中计算。您必须转义 space 或将其包含在引号中(并保留通配符)。而你don't want to parse ls。一种根据字母顺序安全地获取最后一个文件的方法,无论文件名如何,也不管文件名是否包含换行符或其他有趣的字符:

files=( "$f "*.backup )
lb="${files[-1]}"

即用一个数组存放所有展开的文件(按名称排序),然后取最后一个元素。您还 shouldn't use upper case variable names 除非您将其导出到子进程的环境中。