PATHから特定のパスを抜く
echo "orig="$PATH IFS=':' read -a pathes <<< "$PATH" declare -a tmp_pathes for path in "${pathes[@]}" do if [ "$path" != "$HOME/.plenv/bin" ]; then tmp_pathes=("${tmp_pathes[@]}" "$path") fi done TMP_PATH=$(printf ":%s" "${tmp_pathes[@]}") PATH=${TMP_PATH:1:${#TMP_PATH}} echo "after="$PATH
split
IFS=':' read -a pathes <<< "$PATH"
IFS変数と 'read -a'を使って, 文字列を IFSに指定した文字で分割した
配列変数に格納することができる.
join
TMP_PATH=$(printf ":%s" "${tmp_pathes[@]}") PATH=${TMP_PATH:1:${#TMP_PATH}}
配列変数の前に joinしたい文字を置き %sとすると(ここでは :%s)とすると
配列の要素がその文字で区切られたものが表示される. ただし一番先頭にも
その区切り文字が現れてしまうので, それは次の行の部分文字列記法により
削除する.
結果
% bash test.sh orig=/home/syohei/.plenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin after=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
おわりに
文字列置換だけでうまくいけばよかったのだが, 少し試したところ
うまくいかなかったのでこのような方法を取ってしまった.
bashの文字列置換をもっと知る必要がある.