# # ksh-like `cd': cd [-LP] [dir [change]] # cd() { OPTIND=1 while getopts "LP" opt do case $opt in L|P) CDOPTS="$CDOPTS -$opt" ;; *) echo "$FUNCNAME: usage: $FUNCNAME [-LP] [dir] [change]" >&2 return 2;; esac done shift $(( $OPTIND - 1 )) case $# in 0) builtin cd $CDOPTS "$HOME" ;; 1) builtin cd $CDOPTS "$@" ;; 2) old="$1" new="$2" case "$PWD" in *$old*) ;; *) echo "${0##*/}: $FUNCNAME: bad substitution" >&2 ; return 1 ;; esac dir=${PWD//$old/$new} builtin cd $CDOPTS "$dir" && echo "$PWD" ;; *) echo "${0##*/}: $FUNCNAME: usage: $FUNCNAME [-LP] [dir] [change]" >&2 return 2 ;; esac }