同じ行に変数を割り当てた後にコマンドを実行する移植性に対処する標準はありますか?
APPLE="cider" echo hi
こういうのがどれほど携帯性がいいのでしょうか?どこで動作し、どこで動作しませんか?
また、私のシェルスクリプトは#!/ bin / shで始まります。
ベストアンサー1
POSIX準拠のシェルを使用しても大丈夫です。
~からシェルコマンド言語のPOSIX定義:(該当事項は太字で表示)
「簡単な命令」は一連のオプションの変数割り当て任意の順序でリダイレクトし、オプションで制御演算子によって終了される単語とリダイレクトが続きます。
与えられた単純なコマンドを実行する必要がある場合(つまり、単純なコマンドが条件付き構造(AND ORリストやCaseステートメントなど)によってバイパスされない場合)、次の拡張、割り当て、およびリダイレクトは次のように実行する必要があります。コマンドテキストの先頭から最後まで:
変数の割り当てとして認識される単語またはリダイレクトに基づいてシェル構文規則ステップ3と4の処理のために保存します。
変数の割り当てやリダイレクト以外の単語は拡張する必要があります。拡張後に残りのフィールドがある場合、最初のフィールドはコマンド名として扱われ、残りのフィールドはコマンドの引数です。
リダイレクトは、次の説明に従って実行する必要があります。リダイレクト。
チルダ拡張、パラメータ拡張、コマンド置換、算術拡張、および引用符の削除を割り当てる前に、すべての変数割り当てを拡張する必要があります。
前のリストから特別な組み込みユーティリティを処理するために、手順3と4の順序を逆にすることができます。特別な組み込みユーティリティ。
コマンド名の結果がない場合、変数の割り当ては現在の実行環境に影響します。そうでなければ、変数の割り当ては、コマンド実行環境に対してエクスポートする必要があり、現在の実行環境に影響を与えてはなりません。(特殊内蔵を除く)
また、#!/bin/sh
非常に重要です。 ~からPOSIXの定義sh
:
shユーティリティは、コマンドライン文字列、標準入力、または指定されたファイルから読み取られたコマンドを実行するコマンド言語ソルバーです。アプリケーションは以下を保証する必要があります。実行されるコマンドは記述言語で表されます。シェルコマンド言語。
sh
したがって、基本的に上記で紹介した規則に従う必要があると言います。
したがって、POSIX準拠のオペレーティングシステムを使用している限り大丈夫です。