質問: fzfのcdのサンプルについて質問です。 ``` # fd - cd to selected directory fd() { local dir dir=$(find ${1:-*} -path '*/\.*' -prune \ -o -type d -print 2> /dev/null | fzf +m) && cd "$dir" } ``` `dir=$(..) &&`という記述がありますが、これはどのようなテクニックなのでしょうか? `cmd1 && cmd2`として、`cmd1`が成功した場合のみ`cmd2`を実行という方法は知っていますが、右辺がないものは初めて見ました。 どうぞよろしくお願い致します。
回答: > > cmd1が成功した場合のみcmd2を実行 > > > と同じです。つまり find コマンドでパスの取得に成功したら、それが変数 dir に代入され、その場合だけ `cd` するということです。 可読性を良くする為に改行されていますが `&&` は必ず後ろにコマンドを期待するので、途中の空白や改行は無視され、見た目には2行でもbash的には1行です。 同じことはパイプラインなどでも当てはまり ``` cmd1 | cmd2 | cmd3 ``` と書くところを下記のように ``` cmd1 | cmd2 | cmd3 ``` と書く事も多いです。 この様にすると可読性が上がると同時に、処理の追加や順序の変更も楽になりますので。 実は、更に以下のような事も可能になります。 ``` # コメント1 cmd1 | # コメント2 cmd2 | # コメント3 cmd3 ```