103 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			103 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
 | 
