私はしばらく前に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
しなければならないいいえここでは二重引用符で囲みました。なぜなら考えるシェルはそれを「単語」に分割します。