スクリプトで使用される変数はどのように設定しますか?グローバル/システム全体である必要はなく、現在のセッションで十分です。ところで、何らかの理由で、現在の端末でスクリプトを直接実行しても消えるようです。
例:
foo=bar
echo "$foo"
出力:bar
ただし、test.shが含まれていてecho "$foo"
次のことを行う場合:
foo=bar
./test.sh
出力が空です。端末セッションを使用して同じセッションでスクリプトを実行するときに有効な一時変数の範囲を設定するにはどうすればよいですか?
答え1
export foo=bar
環境変数をfoo
文字列に設定しますbar
。単一のコマンドを使用して for をfoo=bar ./test.sh
設定することもできます (つまり、ローカルシェルセッションで変数を設定しません)。foo
bar
test.sh
答え2
シェルスクリプトを実行すると、新しいシェルインスタンスで実行され、対話型シェルインスタンスからインスタンス化された変数を継承しません。
このように継承できる特定の変数を環境変数と呼びます。export
たとえば、環境変数に変数を割り当てることができますexport foo=bar
。これは bash 構文で、他のシェルで使用することも、env
別の方法を使用することもできます。
同じシェルインスタンス内で実行するためにシェルスクリプトを「ソース」することもできます。. test.sh
(ピリオドを参照)またはを使用してこれを行うことができますsource test.sh
。対話型セッションまたはシェルスクリプトでこれを行うことができます。これは、外部ファイルから一連のシェル関数または変数定義を取得できるシェル「ライブラリ」を作成するのに非常に便利です。とても便利です。
たとえば、
#!/bin/bash
. /path/lib.sh
echo $foo # foo is instantiated in lib.sh
do_something # this is a shell function from lib.sh
lib.shは次のようになります。
foo="bar"
do_something() {
echo "I am do_something"
}
答え3
別のオプションは、変数をスクリプトにパラメータとして渡すことです。
foo=bar
./test.sh $foo
これにより、問題は./test.shの内容になります。
echo $1
交換する必要がありますecho $foo
。 $ 1はスクリプトに渡された最初の引数を表します。
答え4
同じシェルで割り当てスクリプトとエコーテストスクリプトを実行できます。
root@ijaz-HP-EliteBook-8560p:~# export foo=bar
root@ijaz-HP-EliteBook-8560p:~# cat test.sh
#!/bin/bash
echo "$foo"
root@ijaz-HP-EliteBook-8560p:~# ./test.sh
bar
これはただ一つの方法です。