空の文字列を含む配列スライス

空の文字列を含む配列スライス

foo次のように初期化された配列を考えてみましょう。

$ foo=( a b '' d e f g )

foo7つの要素が含まれ、そのうちの1つは空の文字列です。

fooprint内蔵機能を使用してコンテンツを印刷するには、いくつかの方法があります。

$ print -rl -- $foo
a
b
d
e
f
g
$ print -rl -- "$foo"
a b  d e f g
$ print -rl -- $foo[@]
a
b
d
e
f
g
$ print -rl -- "$foo[@]"
a
b

d
e
f
g

で示される最後の形式のみが"$foo[@]"7つの別々の引数として解釈されます。

print -rl -- ...それでは、最初の5つの要素foo(1行につき1つの要素)だけを表示したいとします。

これはうまくいきません:

$ print -rl -- "$foo[1,5]"
a b  d e

これでもなく:

$ print -rl -- $foo[1,5]
a
b
d
e

別のバリエーションを試してみましたが、どちらも目的の結果を得ませんでした。

a
b

d
e

全体に対応するスライシングは何ですか"$foo[@]"

該当するものがない場合は、bar最初の5つの要素で構成された配列をどのように作成できますかfoo

ベストアンサー1

Split+glob は引数拡張時に分割+glob を実行しませんが、zshまだ null 削除を実行するため、そこで変数を参照する理由の 1 つです。

print -rl -- "$var[@]"

または

print -rl -- "${(@)var}"

これらはすべてBourneと同じ動作を@達成するためのものです。"$@"

要素1〜5の場合:

print -rl -- "${(@)var[1,5]}"

-likekshバリアントも動作します:

print -rl -- "${(@)var:0:5}"

おすすめ記事