V=1 って定義してから bash -c 'echo $V' したら空っぽやった
同じ端末やのに何で見えへんの?
【疑問】変数に入れたのにスクリプトから見えん。シェル変数と環境変数、export・env・set・unset【LPICレベル1】
前提のおさらい。ダブルクォートの中では $ が効いて変数が展開され、シングルクォートの中では展開されない
>>1V=1 で作ったのはシェル変数で、そのシェルの中だけのもの。新しく起動したプログラム(子プロセス)には渡らない
>>3
子プロセスにも渡すには export して環境変数にする
>>4
手元で試した結果V=1; bash -c 'echo "[$V]"' → []export V; bash -c 'echo "[$V]"' → [1]
>>5
ここの bash -c の中身はシングルクォートで囲んでるから、外のシェルでは展開されず、子の bash が展開してるんやな
>>4export V=1 と、定義と export を1行でもできる
>>1
1つのコマンドにだけ渡したいときは?
>>8
コマンドの前に 変数=値 を書く。そのコマンドの環境にだけ入って、シェルには残らないV2=2 bash -c 'echo "[$V2]"' → [2]
そのあと echo "[$V2]" → []
>>1
一覧を見るコマンドは?
>>10env(や printenv)は環境変数だけ、set はシェル変数も含めた全部(関数も出る)。export を引数なしで打つと export 済みの一覧
>>11
env はほかにも、env 変数=値 コマンド で環境を変えてコマンドを動かせる。env -i で空の環境から
>>1
消すのは?
>>13unset V。$ は付けない。unset -f 関数名 で関数を消す
>>14unset $V って書くと V の中身の名前の変数を消しに行くんか。気をつけよ
>>3
よく見る環境変数は PATH(コマンドを探す場所)、HOME、USER、LANG、PS1(プロンプト)あたり。PS1 は export されてないことが多い
>>4
ログアウトしたら消える?
>>17
消える。毎回設定したいなら ~/.bashrc や ~/.bash_profile に書く。どのファイルがいつ読まれるかは 105.1 の範囲
>>4
作っただけの変数はそのシェルだけ、export すると子プロセスにも、か。env と set の違いもこれで分かった
管理人のひとこと
変数=値はシェル変数で、そのシェルの中だけ。exportすると環境変数になって、子プロセスに引き継がれる。子から親の変数は変えられない。変数=値 コマンドはそのコマンドにだけ渡す。参照は$変数(ダブルクォートの中でも展開される)、削除はunset 変数($を付けない)。env・printenvは環境変数、setはシェル変数と関数も含めた一覧、exportだけなら export 済みの一覧。env 変数=値 コマンドで環境を変えて実行できる。- 設定はログアウトで消えるので、残すなら ~/.bashrc などに書く。