POSIXで空白で区切られた配列要素を連結する方法は?

POSIXで空白で区切られた配列要素を連結する方法は?

Bashスクリプトで動作する方法は次のとおりです。

PACKAGES=(
    'curl'
    'git'
    'htop'
    'mc'
    'tree'
    'vim'
)

apt --yes install ${PACKAGES[@]}

しかし、POSIXで同じことを行い、#!/bin/shスクリプトで使用できるようにするにはどうすればよいですか?

ベストアンサー1

POSIXshシェルには1つの配列しかありません($@位置パラメータ配列、つまり$1、、$2...)。次のコマンドを使用してその値を設定できますset

set -- curl git htop mc tree vim

またはコマンドラインから:

./myscript.sh curl git htop mc tree vim

次に、

apt --yes install "$@"

参照を拡張すると、$@配列はその参照に展開されます。リーダー要素つまり、$@配列に合計が含まれているa word場合は、another wordその"$@"項目に展開されます。二つひも。引用しない場合は、$@次に展開されます。4つ文字列a、および.word引用符なしの動作は内容によって異なります。anotherword$IFS

Taiではbash二重引用符拡張が必要です${PACKAGES[@]}

apt --yes install "${PACKAGES[@]}"

関連:Unix Bourne Shellの配列


あなたはしません本物しかし、ここでは「要素をスペースで連結」します。はい、echo値の間にスペースがありますが、これは違いです。

set -- a b c d
printf '>%s<\n' "$@"

これは

>a<
>b<
>c<
>d<

(4つの個々のパラメータが欲しいものです。)

そして

printf '>%s<' "$*"

これは

>a b c d<

(要素を持つパラメータスペースでつながる(コマンドで実際に使用したい文字で$IFSはなく、最初の文字)apt install

おすすめ記事