$variableをエコーすると空の出力が表示されるのはなぜですか? [コピー]

$variableをエコーすると空の出力が表示されるのはなぜですか? [コピー]

echo変数をファイルに保存したいです。コマンドを実行すると、echo $variable出力のない黒い領域が表示されます。理由がわからない。

ファイル1の内容:

name="Jhon"

私の結果

ここに画像の説明を入力してください。

試した解決策:

source /home/ec2-user/file1

それから正解を得ました。ただし、インスタンスからログアウトして再び戻っても機能しません。

さまざまなタイプのインスタンスを試しましたが、同じ結果が得られました。

ほとんどのLinuxチュートリアルでは、変数の実行時に複数のファイルから変数を取得します。なぜsourceコマンドを実行するのですか?

答え1

「ファイルに保存された変数」は実際にはありません。ほとんどの変数タイプは、実行中のプロセス(シェルまたは他のプログラム)状態にあります。 (環境変数、シェル変数などには違いがありますが、ここでは重要ではありません。)各プロセスには一意の変数セットがあります(環境変数のコピーが作成されたときに子プロセスに継承されることを除く)。

同様のコマンドを使用してシェルプロセスで変数を定義できますが、name="Jhon"これは他のプロセスではなく、特定のシェルプロセスでのみ変数を定義します。しかも、それ実行可能なコマンド;定義は実行時にのみ発生します(たとえば、ファイル内にある場合)、name="Rho"後で他のコマンド(たとえば、または)を実行して変更できますunset name

「どこでも」変数を定義する一般的な方法は、〜/ .bashrcなどのシェル初期化ファイルに変数を定義するコマンドを配置することです。ただし、この定義は、シェルの起動時にこのファイルのコマンドが実行されたときにのみ実行されます。たとえば、bash ログイン bash シェルは ~/ ではなく ~/.bash_profile (または ~/.bash_login または ~/.profile) を実行します。 。 bashrc; bash以外のシェル(zshやdashなど)はまだ別の初期化ファイルを実行します。

答え2

rc永続性のために、またはソースファイルで変数を宣言します。rc

echo 'source /home/ec2-user/file1' >> /home/ec2-user/.bashrc

関連情報