変数を正しくエクスポートしたいのですが、そのためには構文のいくつかのバリエーションを理解する必要があります。変数をエクスポートするメカニズムとして、次のようなものがあります。この場合、次を使用します.bashrc
。
export MY_VARIABLE=$USER/.gradle
--$export MY_VARIABLE="$USER/.gradle"
--引用export MY_VARIABLE=USER/.gradle
--$なしexport $MY_VARIABLE=$USER/.gradle
--すべての$
このような場合の $ 記号の意味は何でしょうか? なぜ $ 記号が使用される場合と使用されない場合があるのでしょうか?
パスにスペースがない場合には引用符が必要ですか? $USER に含まれるパスにスペースが含まれている場合はどうなりますか?
エクスポートの左側に $ がないのはなぜですか?
答え1
export
、などのトークンはdeclare
、変数名をパラメータとして明示的に使用します。 は $
一般に「 の値」を意味すると理解できるため、 は$variable
「 の値」を意味しますvariable
。次のコマンド セットを考えてみましょう。
foo=bar
bar=baz
export $foo
( echo "$foo" )
ここで何が起こるかというと、出力に空白行が 1 行表示されます。これは、 コマンドではexport
、が$foo
実際にはbar
( の値foo
) であるため、実際に実行されるコマンドは となるからですexport bar
。foo
はエクスポートされないため、そのデフォルト値は null です。ただし、最後の行が次の場合:
( echo "$bar" )
の出力が得られbaz
、その値は後続のサブシェルに edbar
されたものです。export
"
一般的に、弱い引用符(" ")を使用することは非常に良い考えです。全て変数参照の、あなたが言及した理由(つまり、ファイル名とパス内のスペース)を含むがそれに限定されない理由。たとえば、次のような場合です。
if [ $letter == a ]; then echo "ayyyy"; fi
しかし、letter
空の場合、シェルは実行を試みます
if [ == a ]
これは構文エラーですが、引用符が付いています。
if [ "$letter" == a ];
なる
if [ "" == a ];
これは有効です。