foo
次のように初期化された配列を考えてみましょう。
$ foo=( a b '' d e f g )
foo
7つの要素が含まれ、そのうちの1つは空の文字列です。
foo
print
内蔵機能を使用してコンテンツを印刷するには、いくつかの方法があります。
$ 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}"