0

変数(ファイル名を含む)を二重引用符で囲むと$*sとbackticks(')が展開されます。たとえばcmp "$file1" "$file2"、両方のファイル*の先頭にsが含まれている場合や、その他の「通常」のファイルが含まれている場合は問題ありません。ただし、ファイルの先頭にダッシュがいくつでも含まれている場合は機能しません。代わりに、-の文字通りの意味を実行しようとし、オプションとして扱います。これをどのように回避しますか?

これは機能します:

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

cmp "$var1" "$var2"

だが

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

-は認識されないオプションです。何か案は?

4

3 に答える 3

2

ほとんどのシェルコマンドは、行の残りの部分がオプションではなく実際の引数であることを通知する--オプションをサポートしています。

于 2012-10-11T23:31:24.797 に答える
1

--ほとんどのコマンドは、パラメータオプションの終わりを示すためにを受け入れるので、機能するcmp -- "$var1" "$var2"はずです。シェルが値を展開することについては実際には問題ではありませんが、渡された引数をファイル名またはオプションとして解釈するコマンド自体については問題です。

また、それらが現在のディレクトリ内のファイルである場合は、実行できますcmp ./"$var1" ./"$var2"

于 2012-10-11T23:32:09.750 に答える
1

テストしたばかり:

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

うまく動作します。

于 2012-10-11T23:38:59.063 に答える