たいちょーの雑記

ぼくが3日に一度くらい雑記をかくところ

シェル芸160ノック4

シェル芸本の続きです。今回はシェルの機能を使おう!というセクションだったのでmanを探検するなどしました。

gihyo.jp

前回はこちら

xztaityozx.hatenablog.com

問題16

$ n=XYZ;(for i in {A..C}; do n+=$i;echo $n;done);echo $n
XYZA
XYZAB
XYZABC
XYZ

問題17

$ while read L; do echo $L; done < /etc/passwd > ~/a

問題18

zshだけど

$ IFS=:;declare -A A=(); while read -A a; do b=${a[7]};c=${A[$b]:-0}; A[$b]=$(($c+1)); done < ~/a; for k in ${(k)A}; do echo $k: ${A[$k]}; done
/bin/false: 2
/usr/sbin/nologin: 26
/bin/bash: 1
/bin/sync: 1
/bin/zsh: 1

問題19

$ NUM=$(<./qdata/19/cardno); for L in {,,,,,,,}; do NUM=${NUM/[0-9]/x}; done; echo $NUM

zshだと以下みたいなこともできるけど、patternが使えないので長くなるっすね

$ NUM=$(<./qdata/19/cardno); echo $NUM:s/1/x/:s/2/x/:s/3/x/:s/4/x/:s/5/x/:s/6/x/:s/7/x/:s/8/x

問題20

zshだと

$ (cd /usr; for i (*) echo $i)
bin
config
games
include
lib
lib32
lib64
libexec
libx32
local
sbin
share
src