-classpath "classpath-value"
フラグをjavac
コマンドに渡すシェルスクリプトを作成しようとしています。 CLASSPATH
環境変数を使用してクラスパスを設定できることは知っていますが、この方法で行う必要があるのは非常に具体的です。
私が欲しいもの:
$ classpath_val="-classpath \"/opt/Apache-Tomcat-8.5.20/lib/servlet-api.jar\""
$ javac $classpath_val com/example/Test.Java
ただし、2番目のコマンドを実行すると、classpath_valが指定されていないかのように実行されるため、-classpath flag
は使用されません。
しかし、同じコマンドをエコーすると、次のようになります:
$ echo javac $classpath_val com/example/Test.Java
javac -classpath "/opt/Apache-Tomcat-8.5.20/lib/servlet-api.jar" com/example/Test.Java
それは完全に正しいです。
なぜこうなった?変数値からコマンドに引数を提供できないのですか?
bash
では、おそらく最も堅牢な方法はarrayを使用することです。
classpath_val=("-classpath" "/opt/Apache-Tomcat-8.5.20/lib/servlet-api.jar")
次に、空白を使用しない方法で各要素を展開します
javac "${classpath_val[@]}" com/example/Test.Java
配列の構築と展開の両方で要素を引用すると、空白で要素が分割されなくなります。説明する:
$ arr=("foo" "bar baz")
$ set -- "${arr[@]}"
$ for f; do echo "$f"; done
foo
bar baz