Pythonで文字列がステートメントを表す場合は、それを実行するために使用する必要がありますeval
。
Bashではなぜ状況が違うのですか?
$ cmd="ls"
$ $cmd
a.out company.png
答え1
PythonとBashはまったく異なる言語です。 Pythonの主な目的は、外部プログラム実行機能を追加して内部ステートメントを実行することです。シェルの主な目的は、追加された制御構造と内部コマンドを使用して外部プログラムを実行することです。 Bashは元のシェルよりも多くの内部機能を持っていますが、それでも互換性を保ちます。
シェルの機能の1つは、変数を定義し、後でコマンドで拡張できることです。デフォルトでは、シェルはすべてのステートメントに対してPythonに似たものを暗黙的に使用すると考えることができますeval
。もちろん違いもあります。
eval
一般的な処理レベルと交換レベルが不十分で、追加レベルが必要な場合に便利ですが、危険な可能性があるシェルコマンドもあります。これはラインの残りの部分を評価し、通常の交換のために結果をシェルに提供します。この機能をよりよく理解し、実際に必要になるまで忘れておくのが最善です。