| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  | # must do this because posix mode causes process substitution to be disabled | 
					
						
							|  |  |  | # and flagged as a syntax error, which causes the shell to exit | 
					
						
							|  |  |  | set +o posix | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  | expect() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |         echo expect "$@" | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | HOME=/usr/homes/chet	# to make the check against new-exp.right work | 
					
						
							|  |  |  | expect '<foo bar>' | 
					
						
							|  |  |  | recho "${undef-"foo bar"}"	# should be foo bar | 
					
						
							|  |  |  | expect '<foo>' | 
					
						
							|  |  |  | recho "${und="foo"}"		# should be foo | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect "<$HOME>" | 
					
						
							|  |  |  | recho ${HOME-"}"} | 
					
						
							|  |  |  | expect "<$HOME>" | 
					
						
							|  |  |  | recho "${HOME-'}'}" | 
					
						
							|  |  |  | expect "<$HOME>" | 
					
						
							|  |  |  | recho "${HOME-"}"}" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  | expect $0: 'HOME: }: syntax error: operand expected (error token is "}")' | 
					
						
							|  |  |  | recho "${HOME:`echo }`}"	# should be a math error -- bad substring substitution | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  | expect unset | 
					
						
							|  |  |  | _ENV=oops | 
					
						
							| 
									
										
										
										
											1998-04-17 19:52:44 +00:00
										 |  |  | x=${_ENV[(_$-=0)+(_=1)-_${-%%*i*}]} | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  | echo ${x:-unset} | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | expect "<$HOME>" | 
					
						
							|  |  |  | recho ${HOME} | 
					
						
							|  |  |  | expect "<$HOME>" | 
					
						
							|  |  |  | recho ${HOME:-`echo }`} | 
					
						
							|  |  |  | expect "<$HOME>" | 
					
						
							|  |  |  | recho ${HOME:-`echo "}"`} | 
					
						
							|  |  |  | expect "<$HOME>" | 
					
						
							|  |  |  | recho "${HOME:-`echo "}"`}" | 
					
						
							|  |  |  | expect "<$HOME>" | 
					
						
							|  |  |  | recho "$(echo "${HOME}")" | 
					
						
							|  |  |  | expect "<$HOME>" | 
					
						
							|  |  |  | recho "$(echo "$(echo ${HOME})")" | 
					
						
							|  |  |  | expect "<$HOME>" | 
					
						
							|  |  |  | recho "$(echo "$(echo "${HOME}")")" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | P=*@* | 
					
						
							| 
									
										
										
										
											2002-07-17 14:10:11 +00:00
										 |  |  | expect '<*@>' | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  | recho "${P%"*"}"	#  | 
					
						
							| 
									
										
										
										
											2002-07-17 14:10:11 +00:00
										 |  |  | expect '<*@>' | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  | recho "${P%'*'}"	#  | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  | expect '<@*>' | 
					
						
							|  |  |  | recho "${P#\*}"		# should be @* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<)>' | 
					
						
							|  |  |  | recho "$(echo ")")"	# should be ) | 
					
						
							|  |  |  | expect '<")">' | 
					
						
							|  |  |  | recho "$(echo "\")\"")"	# should be ")" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | foo='abcd   ' | 
					
						
							|  |  |  | expect '<-abcd> <->' | 
					
						
							|  |  |  | recho -${foo}-		# should be -abcd - | 
					
						
							|  |  |  | expect '<-abcd> <->' | 
					
						
							|  |  |  | recho -${foo% *}-	# should be -abcd - | 
					
						
							|  |  |  | expect '<-abcd->' | 
					
						
							|  |  |  | recho -${foo%% *}-	# should be -abcd- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | foo=bar | 
					
						
							|  |  |  | expect '<bar foo>' | 
					
						
							|  |  |  | echo -n $foo' ' ; echo foo | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<bar foo>' | 
					
						
							|  |  |  | echo -n $foo" " ; echo foo | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<bar foo>' | 
					
						
							|  |  |  | echo -n "$foo " ; echo foo | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  | expect '<barfoo>' | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  | echo -e "$foo\c " ; echo foo | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  | expect '<barfoo>' | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  | echo -e $foo"\c " ; echo foo | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  | # make sure backslashes are preserved in front of characters that are not | 
					
						
							|  |  |  | # valid backslash escapes | 
					
						
							|  |  |  | expect '<\x>' | 
					
						
							|  |  |  | echo -e '\x' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  | # substring tests | 
					
						
							|  |  |  | z=abcdefghijklmnop | 
					
						
							|  |  |  | expect '<abcd>' | 
					
						
							|  |  |  | recho ${z:0:4} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<efg> <nop>' | 
					
						
							|  |  |  | recho ${z:4:3} ${z:${#z}-3:3} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  | expect '<efg> <nop>' | 
					
						
							|  |  |  | recho ${z:4:3} ${z: -3:3} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  | expect '<hijklmnop>' | 
					
						
							|  |  |  | recho ${z:7:30} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<abcdefghijklmnop>' | 
					
						
							|  |  |  | recho ${z:0:100} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<abcdefghijklmnop>' | 
					
						
							|  |  |  | recho ${z:0:${#z}} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set 'ab cd' 'ef' 'gh ij' 'kl mn' 'op' | 
					
						
							|  |  |  | expect '<ab cd> <ef>' | 
					
						
							|  |  |  | recho "${@:1:2}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<gh ij> <kl mn>' | 
					
						
							|  |  |  | recho "${@:3:2}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<gh ij> <kl mn> <op>' | 
					
						
							|  |  |  | recho "${@:3:4}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<ab cd> <ef> <gh ij> <kl mn> <op>' | 
					
						
							|  |  |  | recho "${@:1:$#}" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-06 19:14:31 +00:00
										 |  |  | # code to ad-hoc parse arithmetic expressions in substring expansions was | 
					
						
							|  |  |  | # broken until post-2.04 | 
					
						
							|  |  |  | base=/home/chet/foo//bar | 
					
						
							|  |  |  | string1=$base/abcabcabc | 
					
						
							|  |  |  | x=1 j=4 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '</home/chet/foo//bar/abcabcabc>' | 
					
						
							|  |  |  | recho ${string1:0} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<home/chet/foo//bar/abcabcabc>' | 
					
						
							|  |  |  | recho ${string1:1} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<home>' | 
					
						
							|  |  |  | recho ${string1:(j?1:0):j} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<home>' | 
					
						
							|  |  |  | recho ${string1:j?1:0:j} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<home>' | 
					
						
							|  |  |  | recho ${string1:(j?(x?1:0):0):j} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<home>' | 
					
						
							|  |  |  | recho ${string1:j?(x?1:0):0:j} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | unset base string1 x j | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  | # indirect variable references | 
					
						
							|  |  |  | expect '<abcdefghijklmnop>' | 
					
						
							|  |  |  | recho ${!9:-$z} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ef=4 | 
					
						
							|  |  |  | expect '<4>' | 
					
						
							|  |  |  | recho ${!2} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<op>' | 
					
						
							|  |  |  | recho ${!#} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set a b c d e | 
					
						
							|  |  |  | a= | 
					
						
							|  |  |  | expect '<abcdefghijklmnop>' | 
					
						
							|  |  |  | recho ${a:-$z} | 
					
						
							|  |  |  | expect '<abcdefghijklmnop>' | 
					
						
							|  |  |  | recho ${!1:-$z} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect nothing | 
					
						
							|  |  |  | recho ${a-$z} | 
					
						
							|  |  |  | expect nothing | 
					
						
							|  |  |  | recho ${!1-$z} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  | set -u | 
					
						
							|  |  |  | expect $0: ABX: unbound variable | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  | ( recho ${ABX} ) | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  | set +u | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect $0: '$6: cannot assign in this way' | 
					
						
							|  |  |  | recho ${6="arg6"} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  | v=abcde | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # sed-like variable substitution | 
					
						
							|  |  |  | expect '<xxcde>' | 
					
						
							|  |  |  | recho ${v/a[a-z]/xx} | 
					
						
							|  |  |  | expect '<axxde>' | 
					
						
							|  |  |  | recho ${v/a??/axx} | 
					
						
							|  |  |  | expect '<abxyz>' | 
					
						
							|  |  |  | recho ${v/c??/xyz} | 
					
						
							|  |  |  | expect '<abbcde>' | 
					
						
							|  |  |  | recho ${v/#a/ab} | 
					
						
							|  |  |  | expect '<abcde>' | 
					
						
							|  |  |  | recho ${v/#d/ab} | 
					
						
							|  |  |  | expect '<abcabe>' | 
					
						
							|  |  |  | recho ${v/d/ab} | 
					
						
							|  |  |  | expect '<abcdlast>' | 
					
						
							|  |  |  | recho ${v/%?/last} | 
					
						
							|  |  |  | expect '<abcde>' | 
					
						
							|  |  |  | recho ${v/%x/last} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | av=(abcd efgh ijkl mnop qrst uvwx) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<xxcd>' | 
					
						
							|  |  |  | recho ${av/??/xx} | 
					
						
							|  |  |  | expect '<abxx>' | 
					
						
							|  |  |  | recho ${av/%??/xx} | 
					
						
							|  |  |  | expect '<xxgh>' | 
					
						
							|  |  |  | recho ${av[1]/??/xx} | 
					
						
							|  |  |  | expect '<efgh>' | 
					
						
							|  |  |  | recho ${av[1]/%ab/xx} | 
					
						
							|  |  |  | expect '<xxfgh>' | 
					
						
							|  |  |  | recho ${av[1]/#?/xx} | 
					
						
							|  |  |  | expect '<zagh>' | 
					
						
							|  |  |  | recho ${av[1]/??/za} | 
					
						
							|  |  |  | expect '<zaza>' | 
					
						
							|  |  |  | recho ${av[1]//??/za} | 
					
						
							|  |  |  | expect '<zagh>' | 
					
						
							|  |  |  | recho ${av[1]//#??/za} | 
					
						
							|  |  |  | expect '<efza>' | 
					
						
							|  |  |  | recho ${av[1]//%??/za} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<yyy> <yyy> <yyy> <yyy> <yyy> <yyy>' | 
					
						
							|  |  |  | recho ${av[@]/*/yyy} | 
					
						
							|  |  |  | expect '<yyy> <yyy> <yyy> <yyy> <yyy> <yyy>' | 
					
						
							|  |  |  | recho ${av[@]/#*/yyy} | 
					
						
							|  |  |  | expect '<yyy> <yyy> <yyy> <yyy> <yyy> <yyy>' | 
					
						
							|  |  |  | recho ${av[@]/%*/yyy} | 
					
						
							|  |  |  | expect '<yyy> <efgh> <ijkl> <mnop> <qrst> <uvwx>' | 
					
						
							|  |  |  | recho ${av[@]/a*/yyy} | 
					
						
							|  |  |  | expect '<abxx> <efxx> <ijxx> <mnxx> <qrxx> <uvxx>' | 
					
						
							|  |  |  | recho ${av[@]/%??/xx} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set abcd efgh ijkl mnop qrst uvwx | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<xxcd>' | 
					
						
							|  |  |  | recho ${1/??/xx} | 
					
						
							|  |  |  | expect '<xxcd> <xxgh> <xxkl> <xxop> <xxst> <xxwx>' | 
					
						
							|  |  |  | recho ${@/??/xx} | 
					
						
							|  |  |  | expect '<xxcd> <xxgh> <xxkl> <xxop> <xxst> <xxwx>' | 
					
						
							|  |  |  | recho ${@/%??/xx} | 
					
						
							|  |  |  | expect '<zaza>' | 
					
						
							|  |  |  | recho ${3//??/za} | 
					
						
							|  |  |  | expect '<efza>' | 
					
						
							|  |  |  | recho ${3//%??/za} | 
					
						
							|  |  |  | expect '<zaza> <zaza> <zaza> <zaza> <zaza> <zaza>' | 
					
						
							|  |  |  | recho ${@//??/za} | 
					
						
							|  |  |  | expect '<zacd> <zagh> <zakl> <zaop> <zast> <zawx>' | 
					
						
							|  |  |  | recho ${@//#??/za} | 
					
						
							|  |  |  | expect '<yyy> <yyy> <yyy> <yyy> <yyy> <yyy>' | 
					
						
							|  |  |  | recho ${@//*/yyy} | 
					
						
							|  |  |  | expect '<yyy> <efgh> <ijkl> <mnop> <qrst> <uvwx>' | 
					
						
							|  |  |  | recho ${@//a*/yyy} | 
					
						
							|  |  |  | expect '<abcd> <efgh> <ijkl> <mnop> <qrst> <uvwyyy>' | 
					
						
							|  |  |  | recho ${@//%x*/yyy} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  | expect a newline | 
					
						
							|  |  |  | echo $abmcde | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-03-17 21:46:59 +00:00
										 |  |  | # sneaky way to replace a newline in a variable value with something else | 
					
						
							|  |  |  | AVAR=$'This\nstring\nhas\nmultiple\nlines.' | 
					
						
							|  |  |  | echo "${AVAR}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | eval BVAR=\"\${AVAR//$'\n'/-}\" | 
					
						
							|  |  |  | echo "$BVAR" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | unset AVAR BVAR | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  | # run process substitution tests in a subshell so that syntax errors | 
					
						
							|  |  |  | # caused by a shell not implementing process substitution (e.g., one | 
					
						
							|  |  |  | # built on a NeXT) will not cause the whole test to exit prematurely | 
					
						
							| 
									
										
										
										
											1998-04-17 19:52:44 +00:00
										 |  |  | ${THIS_SH} ./new-exp1.sub | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-17 19:52:44 +00:00
										 |  |  | # run the tests of $(<filename) in a subshell to avoid cluttering up | 
					
						
							|  |  |  | # this script | 
					
						
							|  |  |  | ${THIS_SH} ./new-exp2.sub | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<6>' | 
					
						
							|  |  |  | recho ${#:-foo} | 
					
						
							| 
									
										
										
										
											1996-12-23 17:02:34 +00:00
										 |  |  | expect $0: '${#:}: bad substitution' | 
					
						
							|  |  |  | echo ${#:} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect "<'>" | 
					
						
							|  |  |  | recho "'" | 
					
						
							|  |  |  | expect '<">' | 
					
						
							|  |  |  | recho '"' | 
					
						
							|  |  |  | expect '<"hello">' | 
					
						
							|  |  |  | recho "\"hello\"" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | shift $# | 
					
						
							|  |  |  | unset foo | 
					
						
							|  |  |  | z=abcdef | 
					
						
							|  |  |  | z1='abc def' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<>' | 
					
						
							|  |  |  | recho ${foo:-""} | 
					
						
							|  |  |  | expect nothing | 
					
						
							|  |  |  | recho ${foo:-"$@"} | 
					
						
							|  |  |  | expect '<>' | 
					
						
							|  |  |  | recho "${foo:-$@}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # unset var | 
					
						
							|  |  |  | expect '<>' | 
					
						
							|  |  |  | recho ${foo:-"$zbcd"} | 
					
						
							|  |  |  | expect nothing | 
					
						
							|  |  |  | recho ${foo:-$zbcd} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # set var | 
					
						
							|  |  |  | expect '<abcdef>' | 
					
						
							|  |  |  | recho ${foo:-"$z"} | 
					
						
							|  |  |  | expect '<abc def>' | 
					
						
							|  |  |  | recho ${foo:-"$z1"} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<abcdef>' | 
					
						
							|  |  |  | recho ${foo:-$z} | 
					
						
							|  |  |  | expect '<abc> <def>' | 
					
						
							|  |  |  | recho ${foo:-$z1} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<abcdef>' | 
					
						
							|  |  |  | recho "${foo:-$z}" | 
					
						
							|  |  |  | expect '<abc def>' | 
					
						
							|  |  |  | recho "${foo:-$z1}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<abcdef>' | 
					
						
							|  |  |  | recho "${foo:-"$z"}" | 
					
						
							|  |  |  | # this disagrees with sh and ksh, but I think it is right according | 
					
						
							|  |  |  | # to posix.2. | 
					
						
							|  |  |  | expect '<abc def>' | 
					
						
							|  |  |  | recho "${foo:-"$z1"}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set ab cd ef gh | 
					
						
							|  |  |  | expect '<ab> <cd> <ef> <gh>' | 
					
						
							|  |  |  | recho ${foo:-"$@"} | 
					
						
							|  |  |  | expect '<ab> <cd> <ef> <gh>' | 
					
						
							|  |  |  | recho "${foo:-$@}" | 
					
						
							|  |  |  | expect '<ab> <cd> <ef> <gh>' | 
					
						
							|  |  |  | recho "${foo:-"$@"}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | shift $# | 
					
						
							|  |  |  | expect nothing | 
					
						
							|  |  |  | recho $xxx"$@" | 
					
						
							|  |  |  | expect nothing | 
					
						
							|  |  |  | recho ${foo:-$xxx"$@"} | 
					
						
							|  |  |  | expect '<>' | 
					
						
							|  |  |  | recho "${foo:-$xxx$@}" | 
					
						
							|  |  |  | expect '<>' | 
					
						
							|  |  |  | recho "${foo:-$xxx"$@"}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect nothing | 
					
						
							|  |  |  | recho $xxx"$@" | 
					
						
							|  |  |  | expect nothing | 
					
						
							|  |  |  | recho "$xxx$@" | 
					
						
							|  |  |  | expect nothing | 
					
						
							|  |  |  | recho "$@"$xxx | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '<>' | 
					
						
							|  |  |  | recho $xxx"" | 
					
						
							|  |  |  | expect '<>' | 
					
						
							|  |  |  | recho $xxx'' | 
					
						
							|  |  |  | expect '<>' | 
					
						
							|  |  |  | recho ''$xxx | 
					
						
							|  |  |  | expect '<>' | 
					
						
							|  |  |  | recho ""$xxx | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | AB='abcdefghijklmnopqrstuvwxyz' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho ${AB:7:15} | 
					
						
							|  |  |  | recho ${AB:15:7} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho ${AB:20} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho ${AB:0} | 
					
						
							|  |  |  | recho ${AB:0:20} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho ${AB:10:7} | 
					
						
							|  |  |  | recho ${AB:10:3+4} | 
					
						
							|  |  |  | recho ${AB:20/2:3+4} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set 1 2 3 4 5 6 | 
					
						
							|  |  |  | recho \""${*:2:2}"\" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | IFS=: | 
					
						
							|  |  |  | recho \""${*:2:2}"\" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | IFS=$' \t\n' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | z=123456 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho \""${z:2:2}"\" | 
					
						
							|  |  |  | recho \""${z:2}"\" | 
					
						
							|  |  |  | recho \""${z:2:4}"\" | 
					
						
							|  |  |  | recho \""${z:2:6}"\" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set $'\1' $'\2' $'\177' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho $* | 
					
						
							|  |  |  | recho $@ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho ${*} | 
					
						
							|  |  |  | recho ${@} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | xx=one/two/two | 
					
						
							|  |  |  | recho ${xx%/*} | 
					
						
							|  |  |  | recho ${xx/\/two} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | yy=oneonetwo | 
					
						
							|  |  |  | recho ${yy//one} | 
					
						
							|  |  |  | recho ${yy/\/one} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | xx=oneonetwo | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho ${xx/one} | 
					
						
							|  |  |  | recho ${xx//one} | 
					
						
							|  |  |  | recho ${xx/\/one} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  | # out-of-range substrings | 
					
						
							|  |  |  | var=abc | 
					
						
							|  |  |  | c=${var:3} | 
					
						
							|  |  |  | expect nothing | 
					
						
							|  |  |  | recho $c | 
					
						
							|  |  |  | c=${var:4} | 
					
						
							|  |  |  | expect nothing | 
					
						
							|  |  |  | recho $c | 
					
						
							|  |  |  | expect '<./new-exp.tests: -2: substring expression < 0>' | 
					
						
							|  |  |  | c=${var:0:-2} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var=abcdefghi | 
					
						
							|  |  |  | c=${var:3:12} | 
					
						
							|  |  |  | recho $c | 
					
						
							|  |  |  | c=${var:4:20} | 
					
						
							|  |  |  | recho $c | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # make sure null patterns work | 
					
						
							|  |  |  | xxx=endocrine | 
					
						
							|  |  |  | yyy=n | 
					
						
							|  |  |  | unset zzz | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho ${xxx/$yyy/*} | 
					
						
							|  |  |  | recho ${xxx//$yyy/*} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho ${xxx/$zzz/*} | 
					
						
							|  |  |  | recho ${xxx//$zzz/*} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-03-17 21:46:59 +00:00
										 |  |  | recho ${xxx//%${zzz}/} | 
					
						
							|  |  |  | recho ${xxx//%${zzz}} | 
					
						
							|  |  |  | recho ${xxx//#${zzz}/} | 
					
						
							|  |  |  | recho ${xxx//#${zzz}} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  | # another case that caused a core dump in bash-2.0 | 
					
						
							|  |  |  | XPATH=/usr/bin:/bin:/usr/local/bin:/usr/gnu/bin::/usr/bin/X11:/sbin:/usr/sbin | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho ${XPATH//:/ } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | xx=(ar as at au av aw ax ay az) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho ${xx[@]/a/} | 
					
						
							|  |  |  | recho ${xx[@]//a/} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho ${xx[*]/a/} | 
					
						
							|  |  |  | recho ${xx[*]//a/} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho ${xx[@]%?} | 
					
						
							|  |  |  | recho ${xx[*]%?} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho ${xx[@]#?} | 
					
						
							|  |  |  | recho ${xx[*]#?} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set -- ar as at au av aw ax ay az | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho ${@/a/} | 
					
						
							|  |  |  | recho ${@//a/} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho ${*/a/} | 
					
						
							|  |  |  | recho ${*//a/} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho ${@%?} | 
					
						
							|  |  |  | recho ${*%?} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho ${@#?} | 
					
						
							|  |  |  | recho ${*#?} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | shift $# | 
					
						
							|  |  |  | set -u | 
					
						
							|  |  |  | ( recho $9 ; echo after 1) | 
					
						
							|  |  |  | ( recho ${9} ; echo after 2) | 
					
						
							|  |  |  | ( recho $UNSET ; echo after 3) | 
					
						
							|  |  |  | ( recho ${UNSET} ; echo after 4) | 
					
						
							|  |  |  | ( recho "$UNSET" ; echo after 5) | 
					
						
							|  |  |  | ( recho "${UNSET}" ; echo after 6) | 
					
						
							|  |  |  | ( recho "${#UNSET}" ; echo after 7) | 
					
						
							|  |  |  | set +u | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-17 19:52:44 +00:00
										 |  |  | RECEIVED="12345" | 
					
						
							|  |  |  | recho "${RECEIVED:$((${#RECEIVED}-1)):1}" | 
					
						
							|  |  |  | RECEIVED="12345#" | 
					
						
							|  |  |  | recho "${RECEIVED:$((${#RECEIVED}-1)):1}" | 
					
						
							|  |  |  | RECEIVED="#" | 
					
						
							|  |  |  | recho "${RECEIVED:$((${#RECEIVED}-1)):1}" | 
					
						
							|  |  |  | RECEIVED="" | 
					
						
							|  |  |  | recho "${RECEIVED:$((${#RECEIVED}-1)):1}" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-03-17 21:46:59 +00:00
										 |  |  | # tests of new prefix expansion ${!prefix*} | 
					
						
							|  |  |  | ${THIS_SH} ./new-exp3.sub | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  | # bug with indirect expansion through bash-2.05b | 
					
						
							|  |  |  | ${THIS_SH} ./new-exp4.sub | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-03-17 21:46:59 +00:00
										 |  |  | # these caused errors and core dumps in versions before bash-2.04 | 
					
						
							|  |  |  | c="" | 
					
						
							|  |  |  | echo ${c//${$(($#-1))}/x/} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set a b c d e f g | 
					
						
							|  |  |  | recho "$@" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set -- ${@:1:$(($# - 2))} | 
					
						
							|  |  |  | recho "$@" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set a b | 
					
						
							|  |  |  | recho ${@:1:$(($# - 2))} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho ${@:1:0} | 
					
						
							|  |  |  | recho ${@:1:1} | 
					
						
							|  |  |  | recho ${@:1:2} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho "${*:1:0}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # this is an error -- negative expression | 
					
						
							|  |  |  | set a | 
					
						
							|  |  |  | recho ${@:1:$(($# - 2))} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-07-17 14:10:11 +00:00
										 |  |  | XPATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:.:/sbin:/usr/sbin | 
					
						
							|  |  |  | set $( IFS=: ; echo $XPATH )  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho ${@##*/} | 
					
						
							|  |  |  | recho ${@%%[!/]*} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho ${@#/*} | 
					
						
							|  |  |  | recho ${@%*/} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set /full/path/to/x16 /another/full/path | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho ${1%/*} | 
					
						
							|  |  |  | recho ${1%%[!/]*} | 
					
						
							|  |  |  | recho ${1#*/} | 
					
						
							|  |  |  | recho ${1##*/} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-08-26 18:22:31 +00:00
										 |  |  | # this must be last! | 
					
						
							|  |  |  | expect $0: 'ABXD: parameter unset' | 
					
						
							|  |  |  | recho ${ABXD:?"parameter unset"} |