csh:使用 -d 作为参数而不是测试

csh:使用 -d 作为参数而不是测试

我知道-d /path/to/dir可以使用test命令来检查目录。然后:

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

因此不起作用。

但是,我需要能够-d作为参数传递给我的脚本。如何禁用 的特殊属性-d以便我可以将其作为参数传递?

答案1

只需使用双引号"$var":q运算符$var:q


csh变体中,当变量被替换时没有双引号,其结果将扩展为命令或文件名替换(在 POSIX shell 中也是如此,忘记双引号会使您的脚本塞住了并导致许多安全影响)。所以:

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.

相关内容