13

手動でインストールした Java (システム全体のデフォルト Java ではない) を Android Studio ランチャー (studio.sh) で使用しようとしました。PATHファイルでandを既に宣言しているのでJAVA_HOME.bashrcシェル スクリプトでそのファイルを読み込んだだけです。

. /home/foobar/.bashrc

しかし、何らかの理由で、$JAVA_HOME/bin/javaまだスクリプトによって実行可能ファイルとして認識されませんでした。

ログを追加したところJAVA_HOME、~/install/java... として展開されていることがわかりました。つまり、チルダ演算子がホーム ディレクトリに展開されていませんでした。

いろいろ調べてみましたが、展開されていない理由が見つかりませんでした。チルダは Bash 固有の機能ですか (スクリプトは を使用し#!/bin/sh、Linux Mint は bash ではなくダッシュを使用します)? 状況によってはチルダが機能しませんか?

~宣言を$HOMEに置き換えた.bashrcところ、動作したため、HOME は実行時に認識されます。

4

1 に答える 1

17

bash manualでは、パラメーター置換中のブレース展開に注意してください。ただし、再帰的ではありません。

展開の順序は次のとおりです。チルダ展開、パラメーターと変数の展開、算術展開、およびコマンド置換 (左から右へ)。単語分割; ファイル名の展開。

これは、展開されずに bash 変数に格納されたチルダ (またはパラメーター参照またはコマンド置換) が自動的に解決されないことを意味します。JAVA_HOME 変数にはリテラル チルダが含まれているため、bash は自動的に展開しません。

チルダ展開が引用符で囲まれていないため、修正が機能した可能性があります。

$ echo "~"
~
$ echo ~
/home/jeffbowman

...しかし、引用符で囲まれたようなパラメーター展開$HOMEが発生します。これを $HOME に置き換えると、 JAVA_HOME の割り当て中にホーム ディレクトリに展開されます。

FOO=~/bar        # stores /home/jeffbowman/bar
FOO="~/bar"      # stores ~/bar
FOO=$HOME/bar    # stores /home/jeffbowman/bar
FOO="$HOME/bar"  # stores /home/jeffbowman/bar

より良いオプションは割り当てが正しいことを確認することですが、手動で拡張したい場合は、これらの SO の質問にいくつかの適切なオプションがあります。

于 2015-08-28T17:52:15.877 に答える