ソースからEmacsをビルドしようとしています。設定オプションを一覧表示すると、Emacs配列が正しく設定されていません。オプションのオプションを追加するために Bash 配列を追加すると、設定が中断されます。以下は破損した配列です。
BUILD_OPTS=('--with-xml2' '--without-x' '--without-sound' '--without-xpm'
'--without-jpeg' '--without-tiff' '--without-gif' '--without-png'
'--without-rsvg' '--without-imagemagick' '--without-xft' '--without-libotf'
'--without-m17n-flt' '--without-xaw3d' '--without-toolkit-scroll-bars'
'--without-gpm' '--without-dbus' '--without-gconf' '--without-gsettings'
'--without-makeinfo' '--without-compress-install')
if [[ ! -e "/usr/include/selinux/context.h" ]] &&
[[ ! -e "/usr/local/include/selinux/context.h" ]]; then
BUILD_OPTS+=('--without-selinux')
fi
PKG_CONFIG_PATH="${BUILD_PKGCONFIG[*]}" \
CPPFLAGS="${BUILD_CPPFLAGS[*]}" \
CFLAGS="${BUILD_CFLAGS[*]}" CXXFLAGS="${BUILD_CXXFLAGS[*]}" \
LDFLAGS="${BUILD_LDFLAGS[*]}" LIBS="${BUILD_LIBS[*]}" \
./configure --prefix="$INSTALL_PREFIX" --libdir="$INSTALL_LIBDIR" \
"${BUILD_OPTS[*]}"
配列を使用して構成すると、次の結果が得られます。
configure: error: invlaid package name: xml2 --without-x --without-sound --without-xpm --without-jpeg --without-tiff --without-gif ...
私はすでに経験した10.2。配列変数しかし、私は何が間違っているのか理解していません。二重引用符に変更して引用符を使用しなくても役に立ちませんでした。
問題は何で、どのように解決しますか?
答え1
からman bash
:
Any element of an array may be referenced using ${name[subscript]}.
The braces are required to avoid conflicts with pathname expansion. If
subscript is @ or *, the word expands to all members of name. These
subscripts differ only when the word appears within double quotes. If
the word is double-quoted, ${name[*]} expands to a single word with the
value of each array member separated by the first character of the IFS
special variable, and ${name[@]} expands each element of name to a sep‐
arate word.
TL/DR:"${BUILD_PKGCONFIG[@]}"
代わりに使用"${BUILD_PKGCONFIG[*]}"
表示するには:
$ arr=('foo' 'bar baz')
$ printf '%s\n' "${arr[*]}"
foo bar baz
$
$ printf '%s\n' "${arr[@]}"
foo
bar baz
答え2
配列のすべての要素を拡張して、単一の引数で中間スペースに連結します。
"${arrayname[@]}"
代わりに使用すると、"${arrayname[*]}"
目的の結果が得られます。
詳しくはこちらをご覧くださいLESS='+/^[[:space:]]*Arrays' man bash
。