Bash スクリプトの eval コマンド
この記事では、Bash スクリプトで文字列をコマンドとして使用する方法について説明します。 この目的のために、eval
コマンドが使用されます。
Bash スクリプトの評価コマンド
変数または入力値 (たとえば) を使用して文字列を作成し、最後にコマンドとして実行する必要がある特定の Bash スクリプトがあります。 そのような場合は、eval
が解決策です。
Bash では、eval
コマンドはシェル コマンドと同様にパラメーターを評価します。 引数は文字列に結合され、シェル コマンドに送信され、コマンドが実行されます。
現在のシェルでは、eval
がコマンドを実行します。 このコマンドは、特定の演算子または予約語を使用してコマンドを実行する場合に便利です。
このコマンドは、スクリプトを実行するまで変数名がわからないスクリプトでも使用できます。 このガイドは、Linux ユーザーがこのコマンドの使用方法を理解するのに役立ちます。
構文:
eval [arguments...]
arguments
は、文字列リテラルとして結合されたこのコマンドに渡され、実行のために Bash に送信されます。 このコマンドは、コマンドの実行後に終了ステータスを返します。
このコマンドに引数が渡されない場合、または null
が渡された場合、終了ステータスとして 0
が返されます。
eval
を使用してファイル内の行数を数える
数行のテキストを含むファイル sample.txt
があるとします。 そのファイルの行数をカウントする必要がある場合は、wc -l
コマンドを使用できます。
eval
コマンドを使用してこのタスクを実行します。 コマンドは次のようになります。
myComm="wc -l sample.txt"
eval $myComm
これの出力を見てみましょう。
eval
を使用して算術演算を解く
いくつかの算術演算を実行する必要があるとします。 eval
コマンドを使用してこれを行うことができます。
この目的のために Bash スクリプトを作成します。
#!/bin/bash
a=4
b=5
comm1="`expr $a + $b`"
comm2="echo"
eval $comm2 $comm1
このスクリプトでは、2つのコマンドを含む 2つの変数を作成しました。1つは算術演算を実行するためのもので、もう 1つは echo
コマンドのためのものです。 最後の行で、これら 2つの変数を引数として eval
コマンドに渡しました。
eval
はこれら 2つの変数を組み合わせて、以下のようなコマンドを構築します。
echo 'expr 4 + 5'
このスクリプトの実行後、次の出力が得られます。
eval
を使用して変数の値を出力する
次の例では、別の変数を含む変数の値を出力します。
#!/bin/bash
str1="my script"
str2=str1
comm="echo"
eval $comm \${$str2}
上記のスクリプトの出力は次のようになります。
eval
を使用して数値の合計を出力する
次の例では、スクリプトで for
ループを使用して 1 から 4 までの数値の合計を出力します。 次に、eval
コマンドを使用してその合計を出力します。
この問題のスクリプトは次のとおりです。
#!/bin/bash
sum=0
for n in {1..4}
do
sum=$(($sum+$n))
done
comm="echo 'The result of sum from 1-4 is: '"
eval $comm $sum
上記のスクリプトの出力は次のようになります。
まとめ
eval
コマンドは、任意の Bash コマンドを文字列として表現することで実行できます。 このレッスンでは、eval
コマンドがいくつかの Bash 組み込みタスクを実行し、一連の変数を作成します。
このレッスンを読んだ後、ユーザーは eval
コマンドをよりよく理解し、さまざまなアプリケーションに利用できるようになります。
Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.
LinkedIn