複数の変数を一度に定義(シェルにコピーして貼り付け)

複数の変数を一度に定義(シェルにコピーして貼り付け)

変数のリストがあり、ファイル内の変数をコピーしてシェルに貼り付け、[実行]をEnterクリックします。たとえば、

var1="myvar1"
var2="myvar2"

実際には変数が多いので、時間を節約するために1つずつコピーして貼り付けて実行するのではなく、1回の操作ですべての作業を完了してください。
コピーして貼り付けようとしました。

(
var1="myvar1"
var2="myvar2"
)

echo $var1その形式の日付の代わりに空行を出力します。

一度の操作で複数の変数を実行するには?

答え1

1つずつコピーすることなくすべての行を一緒に貼り付けると、改行文字がEnterキーとして使用されます。

なぜなら

(
var1="myvar1"
var2="myvar2"
)

サブシェルで実行されるため動作しません。 finalの前に変数の内容を印刷すると機能します )

(
var1="myvar1"
var2="myvar2"
echo $var2
)

Commpound Commands次のセクションで説明しますman bash

複合コマンド

複合コマンドは、次のいずれかのコマンドです。ほとんどの場合、コマンド記述のリストはコマンドの残りの部分と1つ以上の改行で区切ることができ、セミコロンの代わりに改行文字が続くことがあります。

(list)listサブシェル環境で実行します(以下のコマンド実行環境を参照)。シェル環境に影響を与える変数割り当ておよび組み込みコマンドは、コマンドの完了後に無効になります。戻り状態はリストの終了状態です。

後で彼はこう言いました。

{list; } listは現在のシェル環境でのみ実行されます。リストは改行またはセミコロンで終わる必要があります。これをグループコマンドと呼びます。戻り状態はリストの終了状態です。メタ文字(および)とは異なり、{と}は予約語であるため、予約語を認識できる場所に表示する必要があります。単語の分離を引き起こさないので、スペースやその他のシェルメタ文字でリストと区別する必要があります。

したがって、コマンドはサブシェルでは実行されず、現在のシェル環境で実行されるために機能します。

{
var1="myvar1"
var2="myvar2";
}

について簡単な質問をたくさんしていると思いますBash。 Bashのチュートリアルを読んで、man bash一般的な内容を学びましょう。ヘビーヒートトラップ

答え2

使用する括弧のためにサブシェルを含むコマンドを実行するため、シェルが終了すると、de変数はまだ現在のシェルに設定されません。

なぜこの括弧がこれらの変数を「一度」設定するのか、なぜこれらの変数を「一度」設定するのかはわかりませんが、これらの割り当てを次のように1行に入れることができます。

var1="myvar1" var2="myvar2"

もちろん、Arkadiusz Drabczykが述べたように、これらの行をすべてコピーして貼り付ける方が簡単で、必要なことを行うことができればしない理由はありません。

関連情報