同じ行で変数を割り当てた後にコマンドを実行する移植性をカバーする標準はありますか?
APPLE="cider" echo hi
そのようなものはどれくらいポータブルですか?どこで機能し、どこで機能しませんか?
また、私のシェルスクリプトは、違いがあれば#!/ bin/shで始まります。
承認された回答:
POSIX準拠のシェルを使用している限り、そうです。
シェルコマンド言語のPOSIX定義から:(太字の関連ポイント)
「単純なコマンド」は、一連のオプションの変数割り当てです。 リダイレクトは、任意の順序で、オプションで単語とリダイレクトが続き、制御オペレーターによって終了されます。
特定の単純なコマンドを実行する必要がある場合(つまり、AND-ORリストやcaseステートメントなどの条件付き構文が単純なコマンドをバイパスしていない場合)、次の展開、割り当て、およびリダイレクトはすべて、コマンドテキストの最初から最後まで:
変数の割り当てとして認識される単語 または、シェル文法規則に従ったリダイレクトは、ステップ3および4で処理するために保存されます。
変数の割り当てまたはリダイレクトではない単語は展開されます。展開後にフィールドが残っている場合は、最初のフィールドがコマンド名と見なされ、残りのフィールドがコマンドの引数になります。
リダイレクションは、リダイレクションの説明に従って実行する必要があります。
各変数の割り当ては、値を割り当てる前に、チルダ拡張、パラメーター拡張、コマンド置換、算術拡張、および引用符の削除のために拡張する必要があります。
上記のリストでは、特別な組み込みユーティリティの処理のために、ステップ3と4の順序を逆にすることができます。特別な組み込みユーティリティを参照してください。
コマンド名が表示されない場合、変数の割り当ては現在の実行環境に影響を与えます。それ以外の場合、変数の割り当てはコマンドの実行環境にエクスポートされ、現在の実行環境に影響を与えません (特別なビルトインを除く)。
また、はい#!/bin/sh
重要です。 sh
のPOSIX定義から :
shユーティリティは、コマンドライン文字列、標準入力、または指定されたファイルから読み取られたコマンドを実行するコマンド言語インタプリタです。アプリケーションは、実行されるコマンドがシェルコマンド言語で記述された言語で表現されていることを確認する必要があります 。
つまり、基本的にはsh
上記のルールに従う必要があります。
したがって、POSIX準拠のOSを使用している限り、問題はありません。