Ansatzの備忘録

勉強したことあるいはふと思い立ったこと

シェルワンライナー160本ノック第二章練習問題その3

練習2.1.e クォートと変数

''でクォートされた文字列に Bash は一切手を加えないため、シングルクォートには {print 1+1} のような空白入りの引数を一つにまとめて引き渡したり、$1 などの AWK の変数がシェルの変数として解釈されるのを阻止したりする役割がある。ダブルクォートで囲えば Bash で解釈される。

問題に関しては、小問4だけわからなかった。

grep "$re" /etc/passwd

においてダブルクォートの有無で挙動が変わるという話だった。ダブルクォートがあると grep が受け取る検索文字列が空文字になるが、なかった場合 grep /etc/passwd となり、/etc/passwd が検索文字列として解釈されてしまう。ただ空文字列を置くと何もないことになるが、ダブルクォートに入れておくと空文字列があるということになる、ということか。ちょっと難しい。

 

練習2.1.f Bash の配列と連想配列

配列でも連想配列でも、全要素に言及するときは @ あるいは * を用いる。これらの違いは "${a[@]}" と "${a[*]}" を比べた時に現れる。IFS(Internal Field Separator)を変えておくと後者ではIFSでつながった一つの文字列が出力される。だからなんなんだという感じだ。どう使えばよいのかまるでわからない。