csh: Usando -d como argumento e não como teste

2

Eu sei que -d /path/to/dir pode ser usado para o comando test para verificar um diretório. Então:

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

não funciona por causa disso.

No entanto, preciso poder transmitir -d como argumento para o meu script. Como posso desativar a propriedade especial de -d para que eu possa passá-lo como um argumento?

    
por Pham 24.10.2015 / 15:10

3 respostas

4

Apenas usando aspas duplas "$var" ou :q operator $var:q .

Em csh variants, quando variável é substituída sem aspas duplas , seu resultado será expandido como comando ou nome de arquivo substituído (Isso também é verdade no shell POSIX, esquecendo as aspas duplas fazem seu script chocados e levam a muitos implicações de segurança ). Então:

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

funcionará. Melhor ainda usar o operador :q para trabalhar com nova linha:

if ( $argv[1]:q == "-d" ) echo 1
    
por 24.10.2015 / 18:49
0

Resolveu adicionando um personagem fictício antes da declaração. Assim:

if ( X$argv[1] == "X-d" ).
    
por 24.10.2015 / 15:32
0

-d não possui propriedades especiais, por isso não há nada para desativar.

Como cuonglm mencionou que o erro que você está vendo se deve à citação incorreta da variável $argv[1] , não por causa de alguma propriedade especial imaginária de -d . Aqui está a prova:

$ csh 
% if ( "-d" == "-d" ) echo true
true
% if ( -d == "-d" ) echo true
if: Missing file name.
    
por 24.10.2015 / 15:17

Tags