我正在尝试让我的脚本以 ls 格式“$variable”中的所有文件。*
参数总是一个扩展名为.001的文件 我想找到所有具有相同名称但不同扩展名的文件,例如 $file.002、file.003 等。例如:
first="$1"
others=${first%.001}
ls $others"*"
我的问题是文件名为 file[success].mpg.001
ls 得到的是 file[success].mpg*
这给了我
ls: 无法访问文件[成功].mpg*: 没有那个文件或目录
因为 ls
需要查看:
file\[success\].mpg*
我一直在尝试一切,我注意到的一件事是 ls 喂参数 $1 有效,但如果在我完成 file=$1 之后喂 $file 则无效。 所以我想我该如何将变量更改为参数?
最佳答案
您可以使用 bash
的 printf
命令重新格式化字符串。此外,您不需要引用 *
:
#!/bin/bash
first="$1"
others=$(printf %q "${first%.001}")
ls $others*
printf %q
以可用作 shell 输入的格式重新格式化字符串(关于 bash
的手册页)。
编辑评论:
上述解决方案不适用于文件名中的空格。对于这些情况(正如已经提到的其他一些答案),最好不要使用 printf
而是正确引用所有变量:
#!/bin/bash
first="$1"
others="${first%.001}"
ls -- "$others"*
关于带 ls $variable 的 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5859012/