スクリプトで使用する変数もどのように設定できますか?グローバル/システム全体である必要はありません。現在のセッションで十分です。しかし、何らかの理由で、現在のターミナルから直接スクリプトを実行しても、それらはなくなったように見えます。
例:
foo=bar
echo "$foo"
出力:bar
ただし、test.shにecho "$foo"
が含まれている場合、次のようにします。
foo=bar
./test.sh
出力は空です。同じセッションからスクリプトを実行するときに有効のままであるターミナルセッションで一時変数のスコープを設定するにはどうすればよいですか?
export foo=bar
は、グローバル変数$ fooをbarに設定します。 foo=bar ./test.sh
を単一のコマンドとして使用して、fooをtest.shのbarに設定することもできます。
Shellスクリプトを実行すると、新しいShellインスタンスで実行され、インタラクティブなShellインスタンスでインスタンス化された変数を継承しません。
この方法で、環境変数と呼ばれる特定の変数を継承できます。 export foo=bar
などのexport
を使用して、変数の割り当てを環境変数にします。これは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"
}
別のオプションは、変数をスクリプトに引数として渡すことです。
foo=bar
./test.sh $foo
その後、問題は./test.shの内容になります
echo $1
の代わりに echo $foo
-スクリプトに渡される最初の引数を示す$ 1。
同じシェルで割り当てとエコーテストスクリプトを実行できます。
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
これは、その方法の1つにすぎません。