summaryrefslogtreecommitdiffstats
path: root/runtime/syntax/testdir/input/sh_05.sh
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/syntax/testdir/input/sh_05.sh')
-rw-r--r--runtime/syntax/testdir/input/sh_05.sh373
1 files changed, 373 insertions, 0 deletions
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[*]}