csh:テストの代わりに-dをパラメータとして使用する

csh:テストの代わりに-dをパラメータとして使用する

-d /path/to/dir私はコマンドを使用してtestディレクトリを確認できることを知っています。それから:

if ( $argv[1] == "-d" )

だから動作しません。

-dただし、スクリプトにパラメータとして渡すことができるはずです。-dパラメータとして渡すために特別な属性を無効にするにはどうすればよいですか?

答え1

"$var"二重引用符または:q演算子を使用してください$var:q


cshバリアントでは、変数が置き換えられたときに変数はありません。二重引用符、その結果はコマンドまたはファイル名の代わりに拡張されます(これはPOSIXシェルでも同様です。二重引用符を忘れた場合、スクリプトは猿轡をかむそして多くの人につながるセキュリティへの影響)。だから:

if ( "$argv[1]" == "-d" ) echo 1

動作します。より良い方法は、:q演算子を使用して改行を処理することです。

if ( $argv[1]:q == "-d" ) echo 1

答え2

この問題は、文の前にダミー文字を追加することで解決されました。このように:

if ( X$argv[1] == "X-d" ).

答え3

-d特別な属性がないため、何も無効にする必要はありません。

cuonglmが述べたように、見ているエラーは変数を$argv[1]誤って参照したために発生するものであり、-d証拠は次のとおりです。

$ csh 
% if ( "-d" == "-d" ) echo true
true
% if ( -d == "-d" ) echo true
if: Missing file name.

関連情報