Var1は実行された命令の内容に設定され、Var2はVar1の命令に設定される方法

Var1は実行された命令の内容に設定され、Var2はVar1の命令に設定される方法

2つの変数が欲しいです。

すでに次のようなタスク設定があります。

var1="$(echo hello)"

以下のように印刷すると「Hello」と表示されます。

"${var1}" = "hello"

私が望むもの

var2=$var1

印刷時に「echo hello」を表示

"${var2}" = "echo hello"

var1がコマンドの出力に設定されているため、これは論理的に不可能です。とにかく、コマンド出力の代わりにvar1を設定するコマンドを取得するようにvar2を設定できますか?

答え1

その情報がもう存在しないため、変数を生成したコマンドを抽出することはできません。ただし、をvar1使用してビルドコマンドの実行を遅らせることができますeval。たとえば、

var1="echo hello"
echo "var1: $var1"

var2="$var1"
echo "var2: $var2"

var1=$(eval "$var1")
echo "var1: $var1"

以下を印刷します。

var1: echo hello
var2: echo hello
var1: hello

evalそのコマンドの出力が必要になるまで内部コマンドを実行するために使用できるので、var1コマンド自体をvar1

これは良いコーディング習慣ではありませんが。ほとんどすべての場合に2つの変数を持つ方が良いです。 1つはコマンドを保存し、もう1つは出力を保存します。eval一部のセキュリティと一般的なデバッグの問題により、使用はお勧めできません。


注:この特定の場合に唯一のシェル特殊文字が空白のコマンドがある場合は、複数のシェルを使用すると、変数を実行せずに変数からサブシェルを実行できます。evalつまり、これはほとんどのシェルで機能します。中間職業:

var3=$($var1)

bashおよびkshバリアントで利用可能です。変形にはありませんzsh

関連情報