我有一个 shell 脚本,可以使用 pandoc 将 .md 文件转换为 .pdf。
执行脚本时例如:
./脚本*文件.md
它不会检测需要转换的文件,因为它们类似于:
-第一个文件.md
第二个_文件.md
第一个以破折号开头。第二个在中间的空格之间有一个下划线。
答案1
该脚本很可能使用文件的文件名,其名称被解释为某些实用程序的一组选项,如
rm "$filename"
以$filename
破折号开头。
当路径名以破折号开头时,有两种方法可以确保命令正确执行:
确保路径名不以破折号开头,例如通过包含绝对或相对路径。如果要使用 删除当前目录中的文件
rm "$filename"
,请确保$filename
以 开头./
。这通常是改变循环的问题for filename in some-pattern; do
进入
for filename in ./some-pattern; do
用于
--
向实用程序发出命令行选项结束的信号,如下所示rm -- "$filename"
命令行上选项的解析将在 处停止
--
,所有后面的参数将被视为实用程序的操作数而不是可能的选项。当您在命令行上从用户那里接收路径名并且您不知道它是否带有路径时,这是一个很好的解决方案。请注意,您不能只./
在给定的路径名前面加上前缀,因为这会使路径名相对于当前目录,即使用户可能给出了绝对路径。
与包含空格等的文件名相关: