なんかこう…痒いところに手が届かないというか、いつもこの辺の地味なところで手が止まる今日この頃。
半日悩んだ末にやっと出てきたこの構文。
current_path=$(pwd);files=($current_path/*);echo ${files[@]};
このコマンドは、現在のカレントディレクトリのパスを取得し、そのフォルダ内のすべてのファイル名を配列filesに格納します。
構文詳細
今回の構文の詳細を説明します。内容としては、
- 現在のパスを取得する
- 配列として格納
- ターミナル上に表示
といった流れです。
現在のフォルダパスを取得する
current_path=$(pwd)
この部分は、現在のカレントディレクトリのパスを取得し、変数current_pathに格納するコマンドです。
自身では、一度cd
でディレクトリを移動した後に作業することが多いので、パスを手打ちしたり、いちいちD&Dでフォルダ持ってきたりはしない前提がありまして。なので、現在位置をpwd
で拾い、それを使える状況がベストでして。
ファイル名を配列で
files=($current_path/*)
この部分は、current_pathに格納されたパスを使用して、特定のフォルダ内のすべてのファイル名を配列filesに格納するコマンドです。
そもそもターミナルの使い方に慣れていない筆者で、変数の使い方も怪しいところで…
一度取得したパスを変数に入れ、文字列を追加して使用する、ここにたどり着くにも一苦労でした。
配列に入れたファイル名の取り出し
配列filesを使用して、特定のファイル名を取得することもできます。 例えば、配列filesの最初のファイル名を取得するには、 echo ${files[0]}
と入力します。
配列内のすべてのファイル名を一度に表示するには、 echo ${files[@]}
が使用できますが、改行されずに、スペース区切りで一気に出てきてしまい、可読性が悪くなります。
隠しファイルについて
配列内のファイル名には、隠しファイルも含まれてしまいます。
隠しファイルを除外するには、files=($current_path/.[^.]*)
と書きましょう。