awkコマンドを使用して重複した$PATHエントリを削除する

awkコマンドを使用して重複した$PATHエントリを削除する

PATH環境変数からディレクトリの重複コピーを削除できるbashシェル関数を作成しようとしています。

私はこのコマンドを使って1行のコマンドでこれを行うことができると言われましたが、awkどうすればいいのかわかりません。これを行う方法を知っている人はいますか?

ベストアンサー1

まだ重複エントリがなく、PATHまだ存在しないディレクトリを追加する場合は、シェルのみを使用して簡単にこれを行うことができます。

for x in /path/to/add …; do
  case ":$PATH:" in
    *":$x:"*) :;; # already there
    *) PATH="$x:$PATH";;
  esac
done

以下は、重複エントリが削除されるシェルの断片です$PATH。項目を 1 つずつ見て、まだ表示されていない項目をコピーします。

if [ -n "$PATH" ]; then
  old_PATH=$PATH:; PATH=
  while [ -n "$old_PATH" ]; do
    x=${old_PATH%%:*}       # the first remaining entry
    case $PATH: in
      *:"$x":*) ;;          # already there
      *) PATH=$PATH:$x;;    # not there yet
    esac
    old_PATH=${old_PATH#*:}
  done
  PATH=${PATH#:}
  unset old_PATH x
fi

おすすめ記事