如何扩展以短划线( - )开头的文件名

时间:2012-10-11 23:23:52

标签: linux bash

我知道如果你用一个双引号括起一个包含文件名的变量,它会展开$*和反引号(')。例如,如果两个文件在开头都包含cmp "$file1" "$file2"或其他任何“正常”,那么*就可以了。如果文件在开头有任何数量的破折号,它将无法工作。相反,它会尝试做字面意思 - 将其视为一种选择。你怎么解决这个问题?

这将有效:

var1=*file.txt
var2=*file2.txt

cmp "$var1" "$var2"

但是

var1=-file.txt 
cmp "$var1" "$var2" 

会说 - 是一个无法识别的选项。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

大多数shell命令都支持一个 - 选项来告诉他们该行的其余部分是实际参数,而不是选项。

答案 1 :(得分:1)

大多数命令都会接受--来标记参数选项的结尾,因此cmp -- "$var1" "$var2"应该有效。它实际上不是关于shell扩展值的问题,而是关于命令本身将传递的参数解释为文件名或选项。

此外,如果它们是当前目录中的文件,则可以cmp ./"$var1" ./"$var2"

答案 2 :(得分:1)

刚刚测试过:

solaris10$ var3=-ts
solaris10$ var4=ts1
solaris10$ cmp -- "$var3" "$var4"
-ts ts1 differ: char 10, line 1
solaris10$ 

工作正常。