1#
2# ksh-like `cd': cd [-LP] [dir [change]]
3#
4cd()
5{
6	OPTIND=1
7	while getopts "LP" opt
8	do
9		case $opt in
10		L|P)	CDOPTS="$CDOPTS -$opt" ;;
11		*)	echo "$FUNCNAME: usage: $FUNCNAME [-LP] [dir] [change]" >&2
12			return 2;;
13		esac
14	done
15
16	shift $(( $OPTIND - 1 ))
17
18	case $# in
19	0)	builtin cd $CDOPTS "$HOME" ;;
20	1) 	builtin cd $CDOPTS "$@" ;;
21	2)	old="$1" new="$2"
22		case "$PWD" in
23		*$old*)	;;
24		*)	 echo "${0##*/}: $FUNCNAME: bad substitution" >&2 ; return 1 ;;
25		esac
26
27		dir=${PWD//$old/$new}
28
29		builtin cd $CDOPTS "$dir" && echo "$PWD"
30
31		;;
32	*)	echo "${0##*/}: $FUNCNAME: usage: $FUNCNAME [-LP] [dir] [change]" >&2
33		return 2 ;;
34	esac
35}
36