Linuxのevalコマンドの使い方を詳しく解説
eval コマンドは、C 言語のマクロ置換と同様に、まずコマンド ラインですべての置換をスキャンしてから、コマンドを実行します。このコマンドは、1 回のスキャンでは機能を達成できない変数に対して使用されます。このコマンドは変数を 2 回スキャンします。 2 回のスキャンを必要とするこれらの変数は、複合変数と呼ばれることもあります。
新しいファイル test を作成し、文字列「HelloWorld!」をファイルに書き込み、cat test を変数 WORD に割り当てます。ただし、eval WORD のコンテンツにはアクセスできません。 eval コマンドは次のコマンドを 2 回スキャンするため、1 回目は WORD を cat test に置き換え、2 回目は cat test を実行します。
2.eval は、必ずしも複雑な変数ではなく、単純な変数を書き戻すためにも使用できます。
NAME=ZONE
eval echo $NAME は echo $NAME
3 と同等です。eval コマンドは、シェルに渡された最後のパラメータを取得することもできます
最後のパラメータの内容を表示したい場合は、echo を使用して直接表示できます。たとえば、最初と最後の 2 つのパラメータを入力すると、echo $2 を使用して最後のパラメータを表示できます。パラメータ
但是,如果我们不知道参数个数还想查看最后一个参数内容该怎么办呢?这是我们就想到使用 $$#为传给shell脚本的参数个数,但是上例中 echo “$$#”后显示的其实是参数个数,而使用eval echo “$$#”才显示最后一个参数的内容。
对上述第3点补充: 今天学习eval命令时,发现了这个问题: echo "Last argument is $(eval echo \$$#)" a b c d e 这句话本意打印:Last argument is e 但实际打印的是:Last argument is -bash a b c d e $#一般用在脚本中的,用在命令行的话就要先使用set设置位置参数,因此修改为如下: set - a b c d e echo "Last argument is $(eval echo \$$#)" Last argument is e set - a b c d e f echo "Last argument is $(eval echo $#)" Last argument is 6
4、条件筛选
在file文件中写入两列数据,第一列对应KEY 、第二列为VALUE,使用eval命令将KEY与VALUE的值对应起来,从文件中读取
eval进阶:
1.shell 也提供了 eval 命令,如同熟悉的其他脚本语言,会将它的参数做为命令执行,初看会疑惑为什么shell要提供两种动态执行命令字串的机制,但是经过仔细分析,才发现shell的eval同其他语言有很大区别。
2.shell 中的 eval
2.1 不能获得函数处理结果 ,如1所说,所有命令,函数的处理结果只能通过 ``来获得,那么其它语言中利用eval来获得动态生成代码执行后的输出变得不可能。
2.2 eval 嵌套无意义 ,在其他语言中可以通过 eval(eval("code")),来执行(执行动态生成的code的返回),而由于shell 中 eval 将后面的eval命令简单当作命令字符串执行,失去了嵌套作用,嵌套被命令替换取代。
eval的作用是再次执行命令行处理,也就是说,对一个命令行,执行两次命令行处理。这个命令要用好,就要费一定的功夫。我举两个例子,抛砖引玉.
例子1:用eval技巧实现shell的控制结构for
[root@home root]# cat myscript1 QUOTE: #!/bin/sh evalit(){ if [ $cnt = 1 ];then eval $@ return else let cnt="cnt-1" evalit $@ fi eval $@ } cnt=$1 echo $cnt | egrep "^[1-9][0-9]*$" >/dev/null if [ $? -eq 0 ]; then shift evalit $@ else echo 'ERROR!!! Check your input!' fi [root@home root]# ./myscript1 3 hostname home home home [root@home root]# ./myscript1 5 id |cut -f1 -d' ' uid=0(root) uid=0(root) uid=0(root) uid=0(root) uid=0(root) 注意:bash里有两个很特殊的变量,它们保存了参数列表。 $*,保存了以$IFS指定的分割符所分割的字符串组。 $@,原样保存了参数列表,也就是"$1""$2"...
这里我使用了函数递归以及eval实现了for结构。
当执行eval $@时,它经历了步骤如下:
第1步,分割成eval $@
第6步,扩展$@为hostname
第11步,找到内置命令eval
重复一次命令行处理,第11步,找到hostname命令,执行。
注意:也许有人想当然地认为,何必用eval呢?直接$@来执行命令就可以了嘛。
例子2:一个典型错误的例子
コマンドラインが複雑な場合(パイプやその他の文字を含む)、$a 文字列の内容を直接実行するとエラーが発生します。以下のように分析します。
$aはパラメータ展開、つまりパイプライン解析がスキップされるため、"|"、"cut"、"-f1"、"-d"は全てidコマンドのパラメータになります 、もちろん何か問題が発生しました。
ただし、最初のコマンドライン処理で取得した「id」、「|」、「cut」、「-f1」、「-d」文字列を再度処理する eval を使用すると、今度はパイプラインを正しく分析できます。
つまり、コマンドまたはスクリプトの設計がコマンド ラインを通じて正しく処理できることを確認してください。ステップをスキップすると、予期しないエラーが発生する可能性があります。関連する推奨事項:JavaScriptでの評価の使用の説明eval()javascriptのeval()関数の戻り値と可変環境の使用例の説明の説明
JavaScript が eval() 関数を使用して JavaScript 文字列インスタンスを計算する方法の詳細な説明
以上がLinuxのevalコマンドの使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











DeepSeekは、Webバージョンと公式Webサイトの2つのアクセス方法を提供する強力なインテリジェント検索および分析ツールです。 Webバージョンは便利で効率的であり、公式ウェブサイトは包括的な製品情報、ダウンロードリソース、サポートサービスを提供できます。個人であろうと企業ユーザーであろうと、DeepSeekを通じて大規模なデータを簡単に取得および分析して、仕事の効率を向上させ、意思決定を支援し、イノベーションを促進することができます。

DeepSeekをインストールするには、Dockerコンテナ(最も便利な場合は、互換性について心配する必要はありません)を使用して、事前コンパイルパッケージ(Windowsユーザー向け)を使用してソースからコンパイル(経験豊富な開発者向け)を含む多くの方法があります。公式文書は慎重に文書化され、不必要なトラブルを避けるために完全に準備します。

Bitgetは、スポット取引、契約取引、デリバティブなど、さまざまな取引サービスを提供する暗号通貨交換です。 2018年に設立されたこのExchangeは、シンガポールに本社を置き、安全で信頼性の高い取引プラットフォームをユーザーに提供することに取り組んでいます。 Bitgetは、BTC/USDT、ETH/USDT、XRP/USDTなど、さまざまな取引ペアを提供しています。さらに、この取引所はセキュリティと流動性について評判があり、プレミアム注文タイプ、レバレッジド取引、24時間年中無休のカスタマーサポートなど、さまざまな機能を提供します。

世界をリードするデジタル資産交換であるOuyi Okxは、安全で便利な取引体験を提供するために、公式のインストールパッケージを開始しました。 OUYIのOKXインストールパッケージは、ブラウザに直接インストールでき、ユーザー向けの安定した効率的な取引プラットフォームを作成できます。インストールプロセスは、簡単で理解しやすいです。

Gate.ioは、インストールパッケージをダウンロードしてデバイスにインストールすることで使用できる人気のある暗号通貨交換です。インストールパッケージを取得する手順は次のとおりです。Gate.ioの公式Webサイトにアクセスし、「ダウンロード」をクリックし、対応するオペレーティングシステム(Windows、Mac、またはLinux)を選択し、インストールパッケージをコンピューターにダウンロードします。スムーズなインストールを確保するために、インストール中に一時的にウイルス対策ソフトウェアまたはファイアウォールを一時的に無効にすることをお勧めします。完了後、ユーザーはGATE.IOアカウントを作成して使用を開始する必要があります。

OKXとしても知られるOUYIは、世界をリードする暗号通貨取引プラットフォームです。この記事では、OUYIの公式インストールパッケージのダウンロードポータルを提供します。これにより、ユーザーはさまざまなデバイスにOUYIクライアントをインストールすることが容易になります。このインストールパッケージは、Windows、Mac、Android、およびiOSシステムをサポートします。インストールが完了した後、ユーザーはOUYIアカウントに登録またはログインし、暗号通貨の取引を開始し、プラットフォームが提供するその他のサービスを楽しむことができます。

Gate.ioは、広範なトークン選択、低い取引手数料、ユーザーフレンドリーなインターフェイスで知られる高く評価されている暗号通貨取引プラットフォームです。高度なセキュリティ機能と優れたカスタマーサービスにより、Gate.ioは、信頼できる便利な暗号通貨取引環境をトレーダーに提供します。 gate.ioに参加する場合は、リンクをクリックして公式登録インストールパッケージをダウンロードして、暗号通貨取引の旅を開始してください。

このチュートリアルは、既存のApacheサーバーに沿って、潜在的にubuntuシステムにnginxとphpmyAdminをインストールおよび構成することをガイドします。 Nginxのセットアップをカバーし、Apacheとの潜在的なポートの競合を解決し、Mariadbをインストールします(
