我知道如果你用一个双引号括起一个包含文件名的变量,它会展开$
,*
和反引号('
)。例如,如果两个文件在开头都包含cmp "$file1" "$file2"
或其他任何“正常”,那么*
就可以了。如果文件在开头有任何数量的破折号,它将无法工作。相反,它会尝试做字面意思 - 将其视为一种选择。你怎么解决这个问题?
这将有效:
var1=*file.txt
var2=*file2.txt
cmp "$var1" "$var2"
但是
var1=-file.txt
cmp "$var1" "$var2"
会说 - 是一个无法识别的选项。有什么想法吗?
答案 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$
工作正常。