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
。