challenge 擬似lsの実装

スラッシュで区切られた文字列の配列(以下パスリスト)がある。
このパスリストにたいして擬似的なlsを行いたい。
lsはパスリストと表示対象ディレクトリのパスを入力する。

例としては以下のようになる。
pathList = ["aaa/bbb","aaa/ccc","aaa/ddd/eee","bbb/ddd/eee"]

ls(pathList,"aaa/")
>["bbb","ccc","ddd/"]

ls(pathList,"aaa/ddd/")
>["eee"]

なおパスリストが大きくなったとき、速度がなるべく低下しないように実装するのが望ましい。
文字列は任意の文字コードであると仮定してかまわない。

Posted feedbacks - Bash

シェルのPathname expansionに依存しているので、*や[],{}なども使えてしまいますが、別に問題ないですよね?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
myls(){
  local ptn a
  ptn=${1/%\//}/
  shift
  while [[ $# -gt 0 ]]; do
    a=${1#$ptn}
    if [[ $a != $1 ]]; then
      echo -n ${a/%\/*/\/}" "
    fi
    shift
  done
  echo
}

pathList=("aaa/bbb" "aaa/ccc" "aaa/ddd/eee" "bbb/ddd/eee")
myls "aaa/" ${pathList[@]}
myls "aaa/ddd/" ${pathList[@]}

Index

Feed

Other

Link

Pathtraq

loading...