From 029f72b1a93430b24b88eb3a72c6114d9f149737 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 10 Apr 2024 22:09:20 +0200 Subject: Adding upstream version 2:9.1.0016. Signed-off-by: Daniel Baumann --- runtime/syntax/testdir/input/sh_05.sh | 373 ++++++++++++++++++++++++++++++++++ 1 file changed, 373 insertions(+) create mode 100644 runtime/syntax/testdir/input/sh_05.sh (limited to 'runtime/syntax/testdir/input/sh_05.sh') diff --git a/runtime/syntax/testdir/input/sh_05.sh b/runtime/syntax/testdir/input/sh_05.sh new file mode 100644 index 0000000..87381e1 --- /dev/null +++ b/runtime/syntax/testdir/input/sh_05.sh @@ -0,0 +1,373 @@ +#!/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[*]} -- cgit v1.2.3