Bashの「eval」コマンドは何ですか?

Bashの「eval」コマンドは何ですか?

evalこのコマンドで何ができますか?なぜ便利ですか? bashに組み込まれた機能ですか?manそのページはありません..

答え1

evalPOSIXの一部です。シェルに組み込むことができるインタフェースです。

これはPOSIXプログラマのマニュアルで説明されています。http://www.unix.com/man-page/posix/1posix/eval/

eval - construct command by concatenating arguments

引数を受け入れてコマンドを設定し、シェルによって実行されます。マンページの例は次のとおりです。

foo=10 x=foo    # 1
y='$'$x         # 2
echo $y         # 3
$foo
eval y='$'$x    # 5
echo $y         # 6
10
  1. 最初の行では、$foovalue'10'とvalueを使用して$x定義します'foo'
  2. これで定義すると文字列$yで構成されます'$foo'。ドル記号はエスケープする必要があります'$'
  3. 結果を確認するには、echo $y
  4. 1)-3)の結果は文字列になります。'$foo'
  5. ここで繰り返し割り当てを使用しますeval。まず、$x文字列を評価します'foo'。今、私たちはy=$foo評価されるステートメントを持っていますy=10
  6. 結果はecho $y現在値です'10'

これは、PerlやJavaScriptなどの多くの言語で一般的な機能です。より多くの例については、perldoc evalをチェックしてください。http://perldoc.perl.org/functions/eval.html

答え2

はい、evalbashは内部コマンドなので、bashマニュアルページに記載されています。

eval [arg ...]
    The  args  are read and concatenated together into a single com-
    mand.  This command is then read and executed by the shell,  and
    its  exit status is returned as the value of eval.  If there are
    no args, or only null arguments, eval returns 0.

普通は一緒に行きます。コマンドの置き換え。明示的でない場合、evalシェルは次のことを試みます。実装する代わりにコマンド置換結果評価するそれ。

書き込みをしたいとし、VAR=value; echo $VARシェルが書き込みを処理する方法の違いに注意してくださいecho VAR=value

1.

    andcoz@...:~> $( echo VAR=value )
    bash: VAR=value: command not found
    andcoz@...:~> echo $VAR
    <empty line>

サブシェルはechoコマンドを実行し、コマンドは結果をVAR=value再びシェルに置き換え、「VAR = value」はコマンドではないため、シェルでエラーを発生させます。ジョブは実行されたことがなく、echo編集のみが行われたため、まだ有効ではありません。

2.

    andcoz@...:~> eval $( echo VAR=value )
    andcoz@...:~> echo $VAR
    value

サブシェル「VAR = value」は、シェルに戻るコマンドに置き換えられ、次にシェルechoeval編集されます。

最後に、evalこれは非常に危険なコマンドです。evalセキュリティの問題を回避するには、コマンドへのすべての入力を慎重に確認する必要があります。

答え3

evalステートメントはシェルに引数をコマンドとして評価し、コマンドラインで実行するように指示します。次のような状況で便利です。

スクリプトでコマンドを変数として定義し、後でそのコマンドを使用するには、evalを使用する必要があります。

/home/user1 > a="ls | more"
/home/user1 > $a
bash: command not found: ls | more
/home/user1 > # Above command didn't work as ls tried to list file with name pipe (|) and more. But these files are not there
/home/user1 > eval $a
file.txt
mailids
remote_cmd.sh
sample.txt
tmp
/home/user1 >

答え4

eval別の外部コマンドではなく組み込みシェルなので、マニュアルページはありません。つまり、コマンドがシェルの内部にあり、bashシェル()にのみ知られていることを意味します。マニュアルページの関連部分はbash次のとおりです。

eval [arg ...]
    The args are read and concatenated together into a single command.  
    This command is then  read  and executed by the shell, and its exit 
    status is returned as the value of eval.  If there are no args, or only 
    null arguments, eval returns 0

また、出力は次のようにhelp evalなります。

eval: eval [arg ...]
    Execute arguments as a shell command.

    Combine ARGs into a single string, use the result as input to the shell,
    and execute the resulting commands.

    Exit Status:
    Returns exit status of command or success if command is null.

eval強力なコマンドなので、それを使用する予定の場合は、できるだけ避けるように非常に注意する必要があります。セキュリティリスク従業員。

関連情報