zshは独特の機能が満載だが、初心者には使い方が判りにくい。「man zsh」から遡ると15個ほどのオンライン・マニュアルが見える。でもインデックスがなく苦戦している。
私はzshに少し慣れてきたので、インターネットの資料を探索し始めた。すると、コンパクトに纏まったサイトを拝見した;
この「SITE MAP: scripting: array」に興味深い事例集があった;
この中で,特に興味深い2部分が連続していたので部分的に引用します;
(1) Create an array with each words of string.
私の以前の記事は違う方法を取りました;
そこでは空白区切りのスカラー変数sから配列aを生成する方法として;
- a=( $(echo $s) ) #以前の記事
- a=( ${=s} ) # ZshWiki
ZshWikiの表式方が短くてスマートだが、覚えにくいなぁ。もしも、次の表現がつかえると、より短くてイメージ的にも覚えやすいが;
- a=( =$s )
(2) Create an array of lines from a file
Macでの/etc/hostsには多数のコメント(#)が付いているのでもう少し複雑です。
- buffer=( "${(f)$(cat /etc/hosts|grep -v '#')}" ); echo $buffer[1]
- ==>;’127.0.0.1 localhost ’
- buffer=( "${(f)"$(cat /etc/hosts|grep -v '#')"}" ); echo $buffer[1]
- buffer=( ${(f)"$(cat /etc/hosts|grep -v '#')"} ); echo $buffer[1]
私は最後の形式をよく使っています。
参考の為に、rootでのlsを示します;
- buffer=("${(f)$(ls)}");echo $buffer[1]
- ==>Applications
なお、スカラー変数が改行(\n)区切りで、其の内部に空白( )がある場合では、次になります;
- % s="a\nbb cc\nddd"; a=( "${(f)$(echo $s)}" );typeset -p a;echo "\$#a=$#a" ⏎
- typeset -a a
- a=(a 'bb cc' ddd)
- $#a=3
____
この記事の履歴
- 開始 2015-06-15(月) 21:15:12
- 追加 2015-06-17(水) 11:04:51 a=( =$s )
- 追加 2015-06-17(水) 11:41:47 s="a\nbb cc\nddd"; a=( "${(f)$(echo $s)}" );
- 修正 2015-06-23(火) 23:06:27 段落の後ろの空白行を手動で修正。他のblogへの移行を検討開始した。
- 修正 2015-07-25(土) 13:19:55 e → echo