2015-06-15

zsh: ZishWiki’s “scripting: array”に関するコメント


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 )
誰かSwiftでzshを整理してくれないかなぁ。

(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 
この手法は番号付きls関数を作るのに役立ちました。感謝します。
なお、スカラー変数が改行(\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

____
この記事の履歴
  1. 開始 2015-06-15(月) 21:15:12 
  2. 追加 2015-06-17(水) 11:04:51  a=(  =$s )
  3. 追加 2015-06-17(水) 11:41:47  s="a\nbb cc\nddd"; a=( "${(f)$(echo $s)}" );
  4. 修正 2015-06-23(火) 23:06:27  段落の後ろの空白行を手動で修正。他のblogへの移行を検討開始した。
  5. 修正 2015-07-25(土) 13:19:55 e → echo

0 件のコメント:

コメントを投稿

注目の投稿

Terminalでの、なんちゃってViモドキ

近頃、ようやくKarabiner-Elementsに慣れてきたので、 Terminalで動作する「擬似Vi-Mode」を作って見たので、ご紹介します。 『概要』 「擬似Vi-Mode」の所以は、方向キー「←↓↑→」を通常の「hjkl」ではなくて「jkil」としました。これ...