2012-10-11 106 views
0

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

这将工作:

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

cmp "$var1" "$var2" 

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

会说 - 是无法识别的选项。有任何想法吗?

回答

2

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

+0

这工作。谢谢 – jimmyC

1

大多数命令将接受--标记的参数选项的结束,所以cmp -- "$var1" "$var2"应该工作。这实际上并不是关于shell扩展值的问题,而是关于命令本身将传递的参数解释为文件名或作为选项。

而且,如果他们是在当前目录下的文件,你可以做cmp ./"$var1" ./"$var2"

+0

只要'var1'包含任何相对路径,即不能以'/ /开头,“./$var”技巧就会工作。 – chepner

1

只是测试:

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

工作得很好。