mirror of
https://github.com/vim/vim
synced 2025-05-02 22:37:47 +02:00
Problem: One more syntax test depends on the system. Solution: Use "dash" instead of "sh".
373 lines
13 KiB
Bash
373 lines
13 KiB
Bash
#!/bin/dash -x
|
|
# sh5
|
|
# Note that this is special for sh. ksh will be an extra file later.
|
|
# Note too, that sh and ksh allow ${var:-sub} as well as ${var-sub}!
|
|
# The ':' is optional!
|
|
|
|
# This all should be OK
|
|
# Case 0a
|
|
[ -t 0 ] && date
|
|
Variable1=value1
|
|
Variable2='value2'
|
|
Variable3="value3"
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 0b
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=$HOME
|
|
Variable2='$HOME'
|
|
Variable3="$HOME"
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 0c
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=$HOME$SHELL
|
|
Variable2=$HOME.$SHELL
|
|
Variable3=$HOME.$SHELL+$HOME-$SHELL/$HOME
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 0d
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=`date`
|
|
Variable2=`id -ng`
|
|
Variable3=`id -ng | wc -c`
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
################################################################################
|
|
#
|
|
# Case 1a with constants
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:=eng1}
|
|
Variable2=${VariableA:-eng2}
|
|
Variable3=${VariableA:?eng3}
|
|
Variable3=${VariableA:+eng3}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 1b with constants in single quotes
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:='eng1'}
|
|
Variable2=${VariableA:-'eng2'}
|
|
Variable3=${VariableA:?'eng3'}
|
|
Variable3=${VariableA:+'eng3'}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 1c with constants in double quotes
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:="eng1"}
|
|
Variable2=${VariableA:-"eng2"}
|
|
Variable3=${VariableA:?"eng3"}
|
|
Variable3=${VariableA:+"eng3"}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 1d: constants but missing colons
|
|
Variable1=${VariableA=eng1}
|
|
Variable2=${VariableA-eng2}
|
|
Variable3=${VariableA?eng3}
|
|
Variable3=${VariableA+eng3}
|
|
Variable1=${VariableA='eng1'}
|
|
Variable2=${VariableA-'eng2'}
|
|
Variable3=${VariableA?'eng3'}
|
|
Variable3=${VariableA+'eng3'}
|
|
Variable1=${VariableA="eng1"}
|
|
Variable2=${VariableA-"eng2"}
|
|
Variable3=${VariableA?"eng3"}
|
|
Variable3=${VariableA+"eng3"}
|
|
|
|
# Case 2a with a variable
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:=$HOME}
|
|
Variable2=${VariableA:-$HOME}
|
|
Variable3=${VariableA:?$HOME}
|
|
Variable3=${VariableA:+$HOME}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 2b with a variable in single quotes
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:='$HOME'}
|
|
Variable2=${VariableA:-'$HOME'}
|
|
Variable3=${VariableA:?'$HOME'}
|
|
Variable3=${VariableA:+'$HOME'}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 2c with a variable in double quotes
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:="$HOME"}
|
|
Variable2=${VariableA:-"$HOME"}
|
|
Variable3=${VariableA:?"$HOME"}
|
|
Variable3=${VariableA:+"$HOME"}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 3a with a command substitution
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:=`date`}
|
|
Variable2=${VariableA:-`date`}
|
|
Variable3=${VariableA:?`date`}
|
|
Variable3=${VariableA:+`date`}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 3b with a command + option substitution
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:=`id -ng`}
|
|
Variable2=${VariableA:-`id -ng`}
|
|
Variable3=${VariableA:?`id -ng`}
|
|
Variable3=${VariableA:+`id -ng`}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 3c with a command + pipe substitution
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:=`id -ng | wc -c`}
|
|
Variable2=${VariableA:-`id -ng | wc -c`}
|
|
Variable3=${VariableA:?`id -ng | wc -c`}
|
|
Variable3=${VariableA:+`id -ng | wc -c`}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
################################################################################
|
|
#
|
|
# The same with one nestet ${} level
|
|
# Case 1a with constants
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:=eng1}}
|
|
Variable2=${VariableA:-${VarB:-eng2}}
|
|
Variable3=${VariableA:-${VarB:?eng3}}
|
|
Variable3=${VariableA:-${VarB:+eng3}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 1b with constants in single quotes
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:='eng1'}}
|
|
Variable2=${VariableA:-${VarB:-'eng2'}}
|
|
Variable3=${VariableA:-${VarB:?'eng3'}}
|
|
Variable3=${VariableA:-${VarB:+'eng3'}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 1c with constants in double quotes
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:="eng1"}}
|
|
Variable2=${VariableA:-${VarB:-"eng2"}}
|
|
Variable3=${VariableA:-${VarB:?"eng3"}}
|
|
Variable3=${VariableA:-${VarB:+"eng3"}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 2a with a variable
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:=$HOME}}
|
|
Variable2=${VariableA:-${VarB:-$HOME}}
|
|
Variable3=${VariableA:-${VarB:?$HOME}}
|
|
Variable3=${VariableA:-${VarB:+$HOME}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 2b with a variable in single quotes
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:='$HOME'}}
|
|
Variable2=${VariableA:-${VarB:-'$HOME'}}
|
|
Variable3=${VariableA:-${VarB:?'$HOME'}}
|
|
Variable3=${VariableA:-${VarB:+'$HOME'}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 2c with a variable in double quotes
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:="$HOME"}}
|
|
Variable2=${VariableA:-${VarB:-"$HOME"}}
|
|
Variable3=${VariableA:-${VarB:?"$HOME"}}
|
|
Variable3=${VariableA:-${VarB:+"$HOME"}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 3a with a command substitution
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:=`date`}}
|
|
Variable2=${VariableA:-${VarB:-`date`}}
|
|
Variable3=${VariableA:-${VarB:?`date`}}
|
|
Variable3=${VariableA:-${VarB:+`date`}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 3b with a command + option substitution
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:=`id -ng`}}
|
|
Variable2=${VariableA:-${VarB:-`id -ng`}}
|
|
Variable3=${VariableA:-${VarB:?`id -ng`}}
|
|
Variable3=${VariableA:-${VarB:+`id -ng`}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 3c with a command + pipe substitution
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:=`id -ng | wc -c`}}
|
|
Variable2=${VariableA:-${VarB:-`id -ng | wc -c`}}
|
|
Variable3=${VariableA:-${VarB:?`id -ng | wc -c`}}
|
|
Variable3=${VariableA:-${VarB:+`id -ng | wc -c`}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
################################################################################
|
|
#
|
|
# The same with two nestet ${} level
|
|
# Case 1a with constants
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:-${VarC:=eng1}}}
|
|
Variable2=${VariableA:-${VarB:-${VarC:-eng2}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:?eng3}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:+eng3}}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 1b with constants in single quotes
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:-${VarC:='eng1'}}}
|
|
Variable2=${VariableA:-${VarB:-${VarC:-'eng2'}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:?'eng3'}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:+'eng3'}}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 1c with constants in double quotes
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:-${VarC:="eng1"}}}
|
|
Variable2=${VariableA:-${VarB:-${VarC:-"eng2"}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:?"eng3"}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:+"eng3"}}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 2a with a variable
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:-${VarC:=$HOME}}}
|
|
Variable2=${VariableA:-${VarB:-${VarC:-$HOME}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:?$HOME}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:+$HOME}}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 2b with a variable in single quotes
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:-${VarC:='$HOME'}}}
|
|
Variable2=${VariableA:-${VarB:-${VarC:-'$HOME'}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:?'$HOME'}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:+'$HOME'}}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 2c with a variable in double quotes
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:-${VarC:="$HOME"}}}
|
|
Variable2=${VariableA:-${VarB:-${VarC:-"$HOME"}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:?"$HOME"}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:?"$HOME"}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:+"$HOME"}}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 3a with a command substitution
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:-${VarC:=`date`}}}
|
|
Variable2=${VariableA:-${VarB:-${VarC:-`date`}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:?`date`}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:+`date`}}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 3b with a command + option substitution
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:-${VarC:=`id -ng`}}}
|
|
Variable2=${VariableA:-${VarB:-${VarC:-`id -ng`}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:?`id -ng`}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:+`id -ng`}}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 3c with a command + pipe substitution
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:-${VarC:=`id -ng | wc -c`}}}
|
|
Variable2=${VariableA:-${VarB:-${VarC:-`id -ng | wc -c`}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:?`id -ng | wc -c`}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:+`id -ng | wc -c`}}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
|
|
################################################################################
|
|
#
|
|
# The same with three nestet ${} level
|
|
# Case 1a with constants
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:-${VarC:-${VarD:=eng1}}}}
|
|
Variable2=${VariableA:-${VarB:-${VarC:-${VarD:-eng2}}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:-${VarD:?eng3}}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:-${VarD:+eng3}}}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 1b with constants in single quotes
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:-${VarC:-${VarD:='eng1'}}}}
|
|
Variable2=${VariableA:-${VarB:-${VarC:-${VarD:-'eng2'}}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:-${VarD:?'eng3'}}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:-${VarD:+'eng3'}}}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 1c with constants in double quotes
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:-${VarC:-${VarD:="eng1"}}}}
|
|
Variable2=${VariableA:-${VarB:-${VarC:-${VarD:-"eng2"}}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:-${VarD:?"eng3"}}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:-${VarD:+"eng3"}}}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 2a with a variable
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:-${VarC:-${VarD:=$HOME}}}}
|
|
Variable2=${VariableA:-${VarB:-${VarC:-${VarD:-$HOME}}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:-${VarD:?$HOME}}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:-${VarD:+$HOME}}}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 2b with a variable in single quotes
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:-${VarC:-${VarD:='$HOME'}}}}
|
|
Variable2=${VariableA:-${VarB:-${VarC:-${VarD:-'$HOME'}}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:-${VarD:?'$HOME'}}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:-${VarD:+'$HOME'}}}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 2c with a variable in double quotes
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:-${VarC:-${VarD:="$HOME"}}}}
|
|
Variable2=${VariableA:-${VarB:-${VarC:-${VarD:-"$HOME"}}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:-${VarD:?"$HOME"}}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:-${VarD:+"$HOME"}}}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 3a with a command substitution
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:-${VarC:-${VarD:=`date`}}}}
|
|
Variable2=${VariableA:-${VarB:-${VarC:-${VarD:-`date`}}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:-${VarD:?`date`}}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:-${VarD:+`date`}}}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 3b with a command + option substitution
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:-${VarC:-${VarD:=`id -ng`}}}}
|
|
Variable2=${VariableA:-${VarB:-${VarC:-${VarD:-`id -ng`}}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:-${VarD:?`id -ng`}}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:-${VarD:+`id -ng`}}}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
# Case 3c with a command + pipe substitution
|
|
[ -t 0 ] && echo "\ndate"
|
|
Variable1=${VariableA:-${VarB:-${VarC:-${VarD:=`id -ng | wc -c`}}}}
|
|
Variable2=${VariableA:-${VarB:-${VarC:-${VarD:-`id -ng | wc -c`}}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:-${VarD:?`id -ng | wc -c`}}}}
|
|
Variable3=${VariableA:-${VarB:-${VarC:-${VarD:+`id -ng | wc -c`}}}}
|
|
echo "$Variable1" "$Variable2" "$Variable3"
|
|
|
|
|
|
################################################################################
|
|
#
|
|
# This is also allowed:
|
|
Variable1=${VariableA-${VarB-${VarC-${VarD=`id -ng | wc -c`}}}}
|
|
|
|
################################################################################
|
|
#
|
|
# All cases with ${Var:?} which works for the sh:
|
|
Variable4=${Variable4:?}
|
|
Variable4=${Variable4:?OK}
|
|
Variable4=${Variable4:?`date`}
|
|
Variable4=${Variable4:?'an OK string'}
|
|
Variable4=${Variable4:?"an OK string"}
|
|
Variable4=${Variable4:?$HOME$SHELL}
|
|
Variable4=${Variable4:?$HOME:$SHELL}
|
|
|
|
# All cases with ${Var:?} which works also for ksh:
|
|
Variable4=${Variable4:?This is OK}
|
|
Variable4=${Variable4:?This is OK, too: `date`}
|
|
|
|
# What happens with ${#identifier[*]}:
|
|
Variable5=${#identifier[*]}
|