GNU/Linux >> Linux の 問題 >  >> Linux

変数の割り当て後に同じ行でコマンドを実行するのはシェルポータブルですか?

同じ行で変数を割り当てた後にコマンドを実行する移植性をカバーする標準はありますか?

APPLE="cider" echo hi

そのようなものはどれくらいポータブルですか?どこで機能し、どこで機能しませんか?

また、私のシェルスクリプトは、違いがあれば#!/ bin/shで始まります。

承認された回答:

POSIX準拠のシェルを使用している限り、そうです。

シェルコマンド言語のPOSIX定義から:(太字の関連ポイント)

「単純なコマンド」は、一連のオプションの変数割り当てです。 リダイレクトは、任意の順序で、オプションで単語とリダイレクトが続き、制御オペレーターによって終了されます。

特定の単純なコマンドを実行する必要がある場合(つまり、AND-ORリストやcaseステートメントなどの条件付き構文が単純なコマンドをバイパスしていない場合)、次の展開、割り当て、およびリダイレクトはすべて、コマンドテキストの最初から最後まで:

  1. 変数の割り当てとして認識される単語 または、シェル文法規則に従ったリダイレクトは、ステップ3および4で処理するために保存されます。

  2. 変数の割り当てまたはリダイレクトではない単語は展開されます。展開後にフィールドが残っている場合は、最初のフィールドがコマンド名と見なされ、残りのフィールドがコマンドの引数になります。

  3. リダイレクションは、リダイレクションの説明に従って実行する必要があります。

  4. 各変数の割り当ては、値を割り当てる前に、チルダ拡張、パラメーター拡張、コマンド置換、算術拡張、および引用符の削除のために拡張する必要があります。

上記のリストでは、特別な組み込みユーティリティの処理のために、ステップ3と4の順序を逆にすることができます。特別な組み込みユーティリティを参照してください。

コマンド名が表示されない場合、変数の割り当ては現在の実行環境に影響を与えます。それ以外の場合、変数の割り当てはコマンドの実行環境にエクスポートされ、現在の実行環境に影響を与えません (特別なビルトインを除く)。

また、はい#!/bin/sh 重要です。 shのPOSIX定義から :

shユーティリティは、コマンドライン文字列、標準入力、または指定されたファイルから読み取られたコマンドを実行するコマンド言語インタプリタです。アプリケーションは、実行されるコマンドがシェルコマンド言語で記述された言語で表現されていることを確認する必要があります

つまり、基本的にはsh 上記のルールに従う必要があります。

関連:このケーブル結合の黒いシェルコンポーネントは?

したがって、POSIX準拠のOSを使用している限り、問題はありません。


Linux
  1. 同じ行にパスワードを指定して、Sudoコマンドを実行しますか?

  2. シェルスクリプト、メッセージをエコーし​​た後に同じ行で読む

  3. コマンド出力を変数に保存するときに改行を保持する方法は?

  1. コンテナー内で docker-compose コマンドからシェル スクリプトを実行します。

  2. 同じ引数で別のコマンドを実行するにはどうすればよいですか?

  3. シェルから Vim コマンドを実行するには?

  1. Linuxコマンドラインから直接MySQL/MariaDBクエリを実行する方法

  2. コマンドの出力をシェル変数に割り当てる方法は?

  3. ユーザーのログアウト後も nohup を使用してコマンドを実行し続ける方法は?