201 lines
3.4 KiB
Text
201 lines
3.4 KiB
Text
# this is needed so that the bad assignments (b[]=bcde, for example) do not
|
|
# cause fatal shell errors when in posix mode
|
|
set +o posix
|
|
|
|
set +a
|
|
# The calls to egrep -v are to filter out builtin array variables that are
|
|
# automatically set and possibly contain values that vary.
|
|
|
|
# make sure declare -a converts an existing variable to an array
|
|
unset a
|
|
a=abcde
|
|
declare -a a
|
|
echo ${a[0]}
|
|
|
|
unset a
|
|
a=abcde
|
|
a[2]=bdef
|
|
|
|
declare -a b[256]
|
|
|
|
unset c[2]
|
|
unset c[*]
|
|
|
|
a[1]=
|
|
|
|
_ENV=/bin/true
|
|
x=${_ENV[(_$-=0)+(_=1)-_${-%%*i*}]}
|
|
|
|
declare -r c[100]
|
|
|
|
echo ${a[0]} ${a[4]}
|
|
echo ${a[@]}
|
|
|
|
echo ${a[*]}
|
|
|
|
# this should print out values, too
|
|
declare -a | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)'
|
|
|
|
unset a[7]
|
|
echo ${a[*]}
|
|
|
|
unset a[4]
|
|
echo ${a[*]}
|
|
|
|
echo ${a}
|
|
echo "${a}"
|
|
echo $a
|
|
|
|
unset a[0]
|
|
echo ${a}
|
|
|
|
echo ${a[@]}
|
|
|
|
a[5]="hello world"
|
|
echo ${a[5]}
|
|
echo ${#a[5]}
|
|
|
|
echo ${#a[@]}
|
|
|
|
a[4+5/2]="test expression"
|
|
echo ${a[@]}
|
|
|
|
readonly a[5]
|
|
readonly a
|
|
readonly -a | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)'
|
|
declare -ar | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)'
|
|
|
|
declare -a d='([1]="" [2]="bdef" [5]="hello world" "test")'
|
|
d[9]="ninth element"
|
|
|
|
declare -a e[10]=test
|
|
declare -a e[10]='(test)'
|
|
|
|
pass=/etc/passwd
|
|
declare -a f='("${d[@]}")'
|
|
b=([0]=this [1]=is [2]=a [3]=test [4]="$PS1" [5]=$pass)
|
|
|
|
echo ${b[@]:2:3}
|
|
|
|
declare -pa | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)'
|
|
|
|
a[3]="this is a test"
|
|
|
|
b[]=bcde
|
|
b[*]=aaa
|
|
echo ${b[ ]}
|
|
|
|
c[-2]=4
|
|
echo ${c[-4]}
|
|
|
|
d[7]=(abdedfegeee)
|
|
|
|
d=([]=abcde [1]="test test" [*]=last [-65]=negative )
|
|
|
|
unset d[12]
|
|
unset e[*]
|
|
|
|
declare -a | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)'
|
|
|
|
ps1='hello'
|
|
unset ps1[2]
|
|
unset ${ps1[2]}
|
|
|
|
declare +a ps1
|
|
declare +a c
|
|
|
|
# the prompt should not print when using a here doc
|
|
read -p "array test: " -a rv <<!
|
|
this is a test of read using arrays
|
|
!
|
|
|
|
echo ${rv[0]} ${rv[4]}
|
|
echo ${rv[@]}
|
|
|
|
declare -a | egrep -v '(BASH_VERSINFO|PIPESTATUS|GROUPS)'
|
|
|
|
export rv
|
|
#set
|
|
|
|
x[4]=bbb
|
|
x=abde
|
|
echo $x
|
|
echo ${x[0]}
|
|
echo ${x[4]}
|
|
echo efgh | ( read x[1] ; echo ${x[1]} )
|
|
echo wxyz | ( declare -a x ; read x ; echo $x ; echo ${x[0]} )
|
|
|
|
# Make sure that arrays can be used to save the positional paramters verbatim
|
|
set -- a 'b c' d 'e f g' h
|
|
|
|
ARGV=( [0]=$0 "$@" )
|
|
|
|
for z in "${ARGV[@]}"
|
|
do
|
|
echo "$z"
|
|
done
|
|
|
|
echo "$0"
|
|
for z in "$@"
|
|
do
|
|
echo "$z"
|
|
done
|
|
|
|
# do various pattern removal and length tests
|
|
XPATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:.:/sbin:/usr/sbin
|
|
|
|
xpath=( $( IFS=: ; echo $XPATH ) )
|
|
|
|
echo ${xpath[@]}
|
|
echo ${xpath[@]##*/}
|
|
echo ${xpath[0]##*/}
|
|
echo ${xpath[@]%%[!/]*}
|
|
echo ${xpath[0]%%[!/]*}
|
|
|
|
# let's try to make it a DOS-style path
|
|
|
|
zecho "${xpath[@]/\//\\}"
|
|
zecho "${xpath[@]//\//\\}"
|
|
zecho "${xpath[@]//[\/]/\\}"
|
|
|
|
# length of the first element of the array, since array without subscript
|
|
# is equivalent to referencing first element
|
|
echo ${#xpath} -- ${#xpath[0]}
|
|
|
|
# number of elements in the array
|
|
nelem=${#xpath[@]}
|
|
echo ${#xpath[@]} -- $nelem
|
|
|
|
# total length of all elements in the array, including space separators
|
|
xx="${xpath[*]}"
|
|
echo ${#xx}
|
|
|
|
# total length of all elements in the array
|
|
xx=$( IFS='' ; echo "${xpath[*]}" )
|
|
echo ${#xx}
|
|
|
|
unset xpath[nelem-1]
|
|
|
|
nelem=${#xpath[@]}
|
|
echo ${#xpath[@]} -- $nelem
|
|
|
|
# arrays and things that look like index assignments
|
|
array=(42 [1]=14 [2]=44)
|
|
|
|
array2=(grep [ 123 ] \*)
|
|
|
|
echo ${array[@]}
|
|
echo "${array2[@]}"
|
|
|
|
# arrays and implicit arithmetic evaluation
|
|
declare -i -a iarray
|
|
|
|
iarray=( 2+4 1+6 7+2 )
|
|
echo ${iarray[@]}
|
|
|
|
iarray[4]=4+1
|
|
echo ${iarray[@]}
|
|
|
|
# make sure the array code behaves correctly with respect to unset variables
|
|
set -u
|
|
( echo ${#narray[4]} )
|