シェル芸本の続きです。今回はシェルの機能を使おう!というセクションだったのでmanを探検するなどしました。
前回はこちら
問題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