Bash スクリプトの eval コマンド

Muhammad Husnain 2023年6月20日
  1. Bash スクリプトの評価コマンド
  2. まとめ
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を使って算術演算を解く

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 コマンドをよりよく理解し、さまざまなアプリケーションに利用できるようになります。

Muhammad Husnain avatar Muhammad Husnain avatar

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