104 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
		
		
			
		
	
	
			104 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| 
								 | 
							
								# test behavior of readonly namerefs and namerefs referencing readonly variables
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# readonly nameref variable referencing read-write global variable
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bar=one
							 | 
						||
| 
								 | 
							
								declare -rn foo0=bar
							 | 
						||
| 
								 | 
							
								unset foo0	# unsets bar
							 | 
						||
| 
								 | 
							
								declare -p bar
							 | 
						||
| 
								 | 
							
								unset -n foo0	# cannot unset
							 | 
						||
| 
								 | 
							
								declare -p foo0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								declare +r foo0		# modifies bar
							 | 
						||
| 
								 | 
							
								declare -p foo0 bar
							 | 
						||
| 
								 | 
							
								declare +r -n foo0	# error
							 | 
						||
| 
								 | 
							
								declare +n foo0		# error
							 | 
						||
| 
								 | 
							
								unset bar
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# readonly nameref variable without a value
							 | 
						||
| 
								 | 
							
								typeset -n foo1
							 | 
						||
| 
								 | 
							
								typeset -r foo1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typeset -p foo1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typeset foo1=bar		# error
							 | 
						||
| 
								 | 
							
								typeset +r foo1			# no-op, follows nameref chain to nothing
							 | 
						||
| 
								 | 
							
								typeset -p foo1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# nameref pointing to read-only global variable
							 | 
						||
| 
								 | 
							
								foo2=bar
							 | 
						||
| 
								 | 
							
								typeset -n foo2
							 | 
						||
| 
								 | 
							
								typeset -r foo2			# changes bar
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typeset -p foo2 bar
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								foo2=bar			# error?
							 | 
						||
| 
								 | 
							
								typeset +r foo2			# attempts to change bar, error
							 | 
						||
| 
								 | 
							
								typeset -p foo2 bar		# nameref unchanged
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# read-only nameref pointing to read-only global variable
							 | 
						||
| 
								 | 
							
								bar3=three
							 | 
						||
| 
								 | 
							
								declare -rn foo3=bar3
							 | 
						||
| 
								 | 
							
								unset foo3	# unsets bar3
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bar3=three
							 | 
						||
| 
								 | 
							
								declare -p bar3
							 | 
						||
| 
								 | 
							
								unset -n foo3	# cannot unset
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								readonly bar3
							 | 
						||
| 
								 | 
							
								declare +r foo3		# error attempting to reference bar3
							 | 
						||
| 
								 | 
							
								declare -p foo3 bar3
							 | 
						||
| 
								 | 
							
								declare +r -n foo3	# error
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# readonly nameref pointing to read-write local -- can we remove nameref attr?
							 | 
						||
| 
								 | 
							
								func()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									typeset bar4=four
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									# readonly nameref
							 | 
						||
| 
								 | 
							
									typeset -n -r foo4=bar4
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									typeset -p foo4 bar4
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									typeset +n foo4
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									typeset -p foo4
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								func
							 | 
						||
| 
								 | 
							
								unset -f func
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# readonly nameref pointing to read-write global -- can we remove nameref attr?
							 | 
						||
| 
								 | 
							
								bar4=four
							 | 
						||
| 
								 | 
							
								foo4=bar4
							 | 
						||
| 
								 | 
							
								# readonly nameref
							 | 
						||
| 
								 | 
							
								typeset -n foo4
							 | 
						||
| 
								 | 
							
								typeset -r -n foo4
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typeset -p foo4 bar4
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typeset +n foo4
							 | 
						||
| 
								 | 
							
								typeset -p foo4
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bar4=four
							 | 
						||
| 
								 | 
							
								: ${foo4=bar4}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typeset -p foo4 bar4
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# readonly local nameref without a value -- can we remove nameref attribute?
							 | 
						||
| 
								 | 
							
								func()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									declare -r -n foo5
							 | 
						||
| 
								 | 
							
									declare -p foo5
							 | 
						||
| 
								 | 
							
									declare +n foo5
							 | 
						||
| 
								 | 
							
									declare -p foo5
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								func
							 | 
						||
| 
								 | 
							
								unset -f func
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# readonly global nameref without a value -- can we remove nameref attribute?
							 | 
						||
| 
								 | 
							
								declare -n foo5
							 | 
						||
| 
								 | 
							
								declare -r -n foo5
							 | 
						||
| 
								 | 
							
								declare -p foo5
							 | 
						||
| 
								 | 
							
								declare +n foo5
							 | 
						||
| 
								 | 
							
								declare -p foo5
							 |