${#A} length of A ${A#*/} strip of everthing upto and including / from A ${A##*/} greedy strip ${A%.out} strip suffix .out from A ${A%%/*} greedy suffix strip $* all the arguments $@ all the arguments $$ PID $? return code $- arguments to shell $# num of args $! last background process number $0 name of command ${A-word} A if non-null, else word ${A=word} A if non-null, else set A=word ${A+word} word if A, else nothing ${A?mesg} A if set else mesg and exit ${!prefix*} ${!prefix@} ${!name[@]} ${!name[*]} ${A/pattern/string} ${A//pattern/string} (ls -y || ls) 2> /dev/null { } (( )) [[ ]] for (( i=0 ; $i<5 ; i++ )) ; do echo $i ; done : do nothing arrays: declare local readonly unset ${A:0:2} first 2 chars of A ${A:5:3} chars 6,7,8 of A