eval
このコマンドで何ができますか?なぜ便利ですか? bashに組み込まれた機能ですか?man
そのページはありません..
答え1
eval
POSIXの一部です。シェルに組み込むことができるインタフェースです。
これは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
- 最初の行では、
$foo
value'10'
とvalueを使用して$x
定義します'foo'
。 - これで定義すると文字列
$y
で構成されます'$foo'
。ドル記号はエスケープする必要があります'$'
。 - 結果を確認するには、
echo $y
。 - 1)-3)の結果は文字列になります。
'$foo'
- ここで繰り返し割り当てを使用します
eval
。まず、$x
文字列を評価します'foo'
。今、私たちはy=$foo
評価されるステートメントを持っていますy=10
。 - 結果は
echo $y
現在値です'10'
。
これは、PerlやJavaScriptなどの多くの言語で一般的な機能です。より多くの例については、perldoc evalをチェックしてください。http://perldoc.perl.org/functions/eval.html
答え2
はい、eval
bashは内部コマンドなので、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」は、シェルに戻るコマンドに置き換えられ、次にシェルecho
でeval
編集されます。
最後に、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
強力なコマンドなので、それを使用する予定の場合は、できるだけ避けるように非常に注意する必要があります。セキュリティリスク従業員。