Mantendo aspas passadas para um script perl wrapper

0

Estou escrevendo um pequeno wrapper perl para configurar variáveis de ambiente, etc., e invoco um comando com o mesmo nome.

./foo.pl -a one -b two -c "1 2 3" -d done

Quando eu saúdo @ARGV, o "" por volta de 1 2 3 foi removido. Alguém sabe como ter perl manter essas citações?

    
por alfinator 09.08.2018 / 23:26

2 respostas

1

Não é que o perl não mantenha as aspas, o perl nunca as obtém. As aspas são apenas uma maneira de evitar que o shell divida o texto em vários argumentos. O mesmo efeito pode ser alcançado com barra invertida:

./foo.pl -a one -b two -c 1\ 2\ 3 -d done

O efeito é em ambos os casos uma string de 1, espaço, 2, espaço, 3. Você também pode colocar aspas em torno dos outros argumentos que não contêm espaços, as aspas ainda não fazem parte dos argumentos passados para o programa.

Se você quiser passar argumentos para o shell, você pode simplesmente colocar aspas ao redor de todos. Ou você pode colocar uma barra invertida antes de cada caractere de shell especial.

    
por 10.08.2018 / 00:13
0

Simplificando, adicione aspas duras:

./foo.pl -a one -b two -c '"1 2 3"' -d done
    
por 10.08.2018 / 00:16