Como posso fornecer argumentos do valor da variável para o comando no shell script?

2

Estou tentando criar um script de shell no qual desejo passar o sinalizador -classpath "classpath-value" para o comando javac . Eu sei que posso usar a variável de ambiente CLASSPATH para definir o caminho de classe, mas tenho uma necessidade muito específica de fazer isso dessa maneira.

O que eu quero:

$ classpath_val="-classpath \"/opt/apache-tomcat-8.5.20/lib/servlet-api.jar\""
$ javac $classpath_val com/example/Test.java

No entanto, quando eu executei o segundo comando, ele apenas executa como se o classpath_val não fosse fornecido, então ele não usa o -classpath flag .

Mas se eu fizer o mesmo comando, obtenho:

$ echo javac $classpath_val com/example/Test.java
javac -classpath "/opt/apache-tomcat-8.5.20/lib/servlet-api.jar" com/example/Test.java

O que é perfeitamente certo.

Por que isso está acontecendo? É que não posso fornecer argumentos para um comando a partir do valor da variável?

    
por Kashyap Kansara 31.12.2017 / 16:02

1 resposta

3

Em bash , provavelmente a maneira mais robusta de fazer isso é usar uma matriz , por exemplo,

classpath_val=("-classpath" "/opt/apache-tomcat-8.5.20/lib/servlet-api.jar")

em seguida, expanda cada elemento de maneira segura usando

javac "${classpath_val[@]}" com/example/Test.java 

A citação dos elementos na construção e na expansão da matriz impede que eles sejam divididos em espaços em branco. Para ilustrar:

$ arr=("foo" "bar baz")
$ set -- "${arr[@]}"
$ for f; do echo "$f"; done
foo
bar baz
    
por steeldriver 31.12.2017 / 16:34