bashスタイルの配列をashに移植するには?

bashスタイルの配列をashに移植するには?

私はしばらく前にbashスクリプトを書いていましたが、今はash

これは次のbashとおりです。

services=( "service1.service"
           "service2.service"                                       
           "service3.service" )  

for service in "${services[@]}"
do
   START $service                   
done

START()
{
   echo "Starting "$1
   systemctl start $1
}

現実的には、アレイには約40のサービスがあり、これらの移行をできるだけ簡単かつクリーンにしたいと思います。常にbash教義を使用します。今私はスクリプトの移植性を高める仕事に直面しました。

移植性の理由で純粋なashソリューションを使用する方が良いです。しかし、私が使用できる非常に強力なデバイスがあるので、busybox携帯性をある程度犠牲にすることができます。読みやすさが大幅に向上した場合にのみ、「クリーン」スクリプトも指標になります。

それは何ですか?持ち運べるそしてきれいこの場合の解決策は?

ベストアンサー1

配列が他のシェルに表示される前の一般的なアプローチは、要素にない区切り文字(またはbash必要なkshエスケープを最小限に抑えるための一般的な区切り文字)を選択し、この区切り文字で区切られたすべてのA文字列要素を繰り返すことです。スペースは通常、シェルがデフォルトで「単語」をスペースに分割するため、最も便利な区切り文字の選択です(他のコンテンツに分割するにはIFSを設定できます)。

たとえば、

# backslash-escape any non-delimiter whitespace and all other characters that
# have special meaning to the shell, e.g. globs, parenthesis, ampersands, etc.
services='service1.service service2.service service3.service'

for s in $services ; do  # NOTE: do not double-quote $services here.
  START "$s"
done

$servicesしなければならないいいえここでは二重引用符で囲みました。なぜなら考えるシェルはそれを「単語」に分割します。

おすすめ記事