1#! /bin/sh 2# 3# @(#)parameter.sh 1.15 20/04/28 Copyright 2016-2020 J. Schilling 4# 5 6# Read test core functions 7. ../../common/test-common 8 9docommand param1 "$SHELL -c 'parameter=param; echo \${parameter:-word}'" 0 "param\n" "" 10docommand param2 "$SHELL -c 'parameter=\"\"; echo \${parameter:-word}'" 0 "word\n" "" 11docommand param3 "$SHELL -c 'unset parameter; echo \${parameter:-word}'" 0 "word\n" "" 12 13docommand param4 "$SHELL -c 'parameter=param; echo \${parameter-word}'" 0 "param\n" "" 14docommand param5 "$SHELL -c 'parameter=\"\"; echo \${parameter-word}'" 0 "\n" "" 15docommand param6 "$SHELL -c 'unset parameter; echo \${parameter-word}'" 0 "word\n" "" 16 17docommand param7 "$SHELL -c 'parameter=param; echo \${parameter:=word}'" 0 "param\n" "" 18docommand param8 "$SHELL -c 'parameter=\"\"; echo \${parameter:=word}'" 0 "word\n" "" 19docommand param9 "$SHELL -c 'unset parameter; echo \${parameter:=word}'" 0 "word\n" "" 20 21docommand param10 "$SHELL -c 'parameter=param; echo \${parameter=word}'" 0 "param\n" "" 22docommand param11 "$SHELL -c 'parameter=\"\"; echo \${parameter=word}'" 0 "\n" "" 23docommand param12 "$SHELL -c 'unset parameter; echo \${parameter=word}'" 0 "word\n" "" 24 25docommand param13 "$SHELL -c 'parameter=param; echo \${parameter:?word}'" 0 "param\n" "" 26docommand param14 "$SHELL -c 'parameter=\"\"; echo \${parameter:?word}'" "!=0" "" IGNORE 27docommand param15 "$SHELL -c 'unset parameter; echo \${parameter:?word}'" "!=0" "" IGNORE 28 29docommand param16 "$SHELL -c 'parameter=param; echo \${parameter?word}'" 0 "param\n" "" 30docommand param17 "$SHELL -c 'parameter=\"\"; echo \${parameter?word}'" 0 "\n" "" 31docommand param18 "$SHELL -c 'unset parameter; echo \${parameter?word}'" "!=0" "" IGNORE 32 33docommand param19 "$SHELL -c 'parameter=param; echo \${parameter:+word}'" 0 "word\n" "" 34docommand param20 "$SHELL -c 'parameter=\"\"; echo \${parameter:+word}'" 0 "\n" "" 35docommand param21 "$SHELL -c 'unset parameter; echo \${parameter:+word}'" 0 "\n" "" 36 37docommand param22 "$SHELL -c 'parameter=param; echo \${parameter+word}'" 0 "word\n" "" 38docommand param23 "$SHELL -c 'parameter=\"\"; echo \${parameter+word}'" 0 "word\n" "" 39docommand param24 "$SHELL -c 'unset parameter; echo \${parameter+word}'" 0 "\n" "" 40 41docommand param25 "$SHELL -c 'echo \$#'" 0 "0\n" "" 42docommand param26 "$SHELL -c 'echo \${#}'" 0 "0\n" "" 43docommand param27 "$SHELL -c 'unset bla; echo \${#bla}'" 0 "0\n" "" 44docommand param28 "$SHELL -c 'bla=ttt; echo \${#bla}'" 0 "3\n" "" 45docommand param29 "$SHELL -c 'bla=ttt; echo \$#bla'" 0 "0bla\n" "" 46docommand param30 "$SHELL -c 'bla=\"\"; echo \${#bla}'" 0 "0\n" "" 47 48docommand param31 "$SHELL -c 'var=dlsfkjslfjalbla; echo \${var%*bla}'" 0 "dlsfkjslfjal\n" "" 49docommand param32 "$SHELL -c 'var=dlsfkjslfjalbla; echo \${var%%*bla}'" 0 "\n" "" 50 51docommand param33 "$SHELL -c 'var=bladlsfkblajslfjal; echo \${var#*bla}'" 0 "dlsfkblajslfjal\n" "" 52docommand param34 "$SHELL -c 'var=bladlsfkblajslfjal; echo \${var##*bla}'" 0 "jslfjal\n" "" 53 54docommand param35 "$SHELL -c 'var=/home/joerg; echo \${var%*rg}'" 0 "/home/joe\n" "" 55docommand param36 "$SHELL -c 'var=/home/joerg; echo \${var%%*rg}'" 0 "\n" "" 56 57docommand param37 "$SHELL -c 'var=/home/joerg; echo \${var#/h*}'" 0 "ome/joerg\n" "" 58docommand param38 "$SHELL -c 'var=/home/joerg; echo \${var##/h*}'" 0 "\n" "" 59 60docommand param39 "$SHELL -c 'echo \${#}'" 0 "0\n" "" 61 62expect_fail_save=$expect_fail 63expect_fail=true 64docommand param40 "$SHELL -c 'echo \${#:}'" "0" "0\n" "" # POSIX unspecified 65expect_fail=$expect_fail_save 66if [ "$failed" = true ] && [ "$is_bosh" = true ]; then 67 fail "$cmd_label: is not expected to fail with bosh" 68elif [ "$failed" = true ] ; then 69 echo 70 echo "Test $cmd_label is unspecified behavior by POSIX." 71 echo 72fi 73 74docommand param41 "$SHELL -c 'echo \${#:-99}'" "0" "0\n" "" 75docommand param42 "$SHELL -c 'echo \${#:+99}'" "0" "99\n" "" 76docommand param43 "$SHELL -c 'echo \${#:-99}' a 1 2 3" "0" "3\n" "" 77docommand param44 "$SHELL -c 'echo \${#-99}'" "0" "0\n" "" 78docommand param45 "$SHELL -c 'echo \${#+99}'" "0" "99\n" "" 79docommand param46 "$SHELL -c 'echo \${#?99}'" "0" "0\n" "" 80docommand param47 "$SHELL -c 'echo \${#=99}'" "0" "0\n" "" 81 82expect_fail_save=$expect_fail 83expect_fail=true 84docommand param50 "$SHELL -c 'echo \${xxx:}'" 0 "\n" "" # POSIX unspecified 85expect_fail=$expect_fail_save 86if [ "$failed" = true ] && [ "$is_bosh" = true ]; then 87 fail "$cmd_label: is not expected to fail with bosh" 88elif [ "$failed" = true ] ; then 89 echo 90 echo "Test $cmd_label is unspecified behavior by POSIX." 91 echo 92fi 93 94expect_fail_save=$expect_fail 95expect_fail=true 96docommand param51 "$SHELL -c 'echo \${xxx:a}'" "!=0" "" IGNORE 97expect_fail=$expect_fail_save 98if [ "$failed" = true ] && [ "$is_bosh" = true ]; then 99 fail "$cmd_label: is not expected to fail with bosh" 100elif [ "$failed" = true ] ; then 101 echo 102 echo "Test $cmd_label is unspecified behavior by POSIX." 103 echo 104fi 105 106expect_fail_save=$expect_fail 107expect_fail=true 108docommand param52 "$SHELL -c 'xxx=/home/joerg; echo \${xxx:}'" 0 "/home/joerg\n" "" 109expect_fail=$expect_fail_save 110if [ "$failed" = true ] && [ "$is_bosh" = true ]; then 111 fail "$cmd_label: is not expected to fail with bosh" 112elif [ "$failed" = true ] ; then 113 echo 114 echo "Test $cmd_label is unspecified behavior by POSIX." 115 echo 116fi 117 118# 119# Test from Robert Elz <kre@munnari.oz.au> 120# $ set -- "abab*cbb" 121# $ echo "${1} ${1#a} ${1%b} ${1##ab} ${1%%b} ${1#*\*} ${1%\**}" 122# 123cmd='set -- "abab*cbb"; echo "${1} ${1#a}"' 124docommand param53 "$SHELL -c '$cmd'" 0 "abab*cbb bab*cbb\n" "" 125cmd='set -- "abab*cbb"; echo ${1} ${1#a}' 126docommand param54 "$SHELL -c '$cmd'" 0 "abab*cbb bab*cbb\n" "" 127 128cmd='set -- "abab*cbb"; echo "${1} ${1%b}"' 129docommand param55 "$SHELL -c '$cmd'" 0 "abab*cbb abab*cb\n" "" 130cmd='set -- "abab*cbb"; echo ${1} ${1%b}' 131docommand param56 "$SHELL -c '$cmd'" 0 "abab*cbb abab*cb\n" "" 132 133cmd='set -- "abab*cbb"; echo "${1} ${1##ab}"' 134docommand param57 "$SHELL -c '$cmd'" 0 "abab*cbb ab*cbb\n" "" 135cmd='set -- "abab*cbb"; echo ${1} ${1##ab}' 136docommand param58 "$SHELL -c '$cmd'" 0 "abab*cbb ab*cbb\n" "" 137 138cmd='set -- "abab*cbb"; echo "${1} ${1%%b}"' 139docommand param59 "$SHELL -c '$cmd'" 0 "abab*cbb abab*cb\n" "" 140cmd='set -- "abab*cbb"; echo ${1} ${1%%b}' 141docommand param60 "$SHELL -c '$cmd'" 0 "abab*cbb abab*cb\n" "" 142 143cmd='set -- "abab*cbb"; echo "${1} ${1#*\*}"' 144docommand param61 "$SHELL -c '$cmd'" 0 "abab*cbb cbb\n" "" 145cmd='set -- "abab*cbb"; echo ${1} ${1#*\*}' 146docommand param62 "$SHELL -c '$cmd'" 0 "abab*cbb cbb\n" "" 147 148cmd='set -- "abab*cbb"; echo "${1} ${1%\**}"' 149docommand param63 "$SHELL -c '$cmd'" 0 "abab*cbb abab\n" "" 150cmd='set -- "abab*cbb"; echo ${1} ${1%\**}' 151docommand param64 "$SHELL -c '$cmd'" 0 "abab*cbb abab\n" "" 152 153docommand param70 "$SHELL -c 'X=#; VAR=#2345; echo \${VAR#\$X}'" 0 "2345\n" "" 154docommand param71 "$SHELL -c 'X=#; VAR=#2345; echo \${VAR#\${X}}'" 0 "2345\n" "" 155 156 157docommand param80 "$SHELL -c 'set -- a b c d; echo \${4}'" 0 "d\n" "" 158docommand param81 "$SHELL -c 'set -- a b c d; echo \${2147483645}'" 0 "\n" "" 159docommand param82 "$SHELL -c 'set -- a b c d; echo \${2147483646}'" 0 "\n" "" 160docommand param83 "$SHELL -c 'set -- a b c d; echo \${2147483647}'" 0 "\n" "" 161docommand param84 "$SHELL -c 'set -- a b c d; echo \${4294967297}'" 0 "\n" "" 162docommand param85 "$SHELL -c 'set -- a b c d; echo \${4294967297-hello}'" 0 "hello\n" "" 163# 164# End test from Robert Elz <kre@munnari.oz.au> 165# 166 167# 168# Test that set -u does not cause "$@" to fail 169# 170docommand param100 "$SHELL -cu 'echo \"\$@\"'" 0 "\n" "" 171 172# 173# Test left to right parameter evaluation 174# 175docommand param150 "$SHELL -c 'X=BAD; X=OK Z=\$X; echo \$Z'" 0 "OK\n" "" 176docommand param151 "$SHELL -c 'X=OLD Y=\${X=OK} Z=\$X; echo \$X \$Z'" 0 "OLD OLD\n" "" 177docommand param152 "$SHELL -c 'Y=\${X=OK} Z=\$X; echo \$X \$Z'" 0 "OK OK\n" "" 178docommand param153 "$SHELL -c 'Y=\${X:=OK} Z=\$X; echo \$X \$Z'" 0 "OK OK\n" "" 179 180# 181# Test Prefix- and Suffix- parameter expansion with double quotes in the pattern 182# 183docommand param180 "$SHELL -c 'foo=abcdefghij; bar=efg ; echo \${foo%\"\$bar\"*}'" 0 "abcd\n" "" 184docommand param181 "$SHELL -c 'foo=abcdefghij; bar=efg ; echo \${foo%\"\$bar*\"}'" 0 "abcdefghij\n" "" 185docommand param182 "$SHELL -c 'foo=abcdefghij"\\\\\\"e; bar=efg ; echo \${foo%\"\e\"}'" 0 "abcdefghij\n" "" 186docommand param183 "$SHELL -c 'foo=abcdefghij"\\\\\\"e; bar=efg ; echo \${foo%\e}'" 0 "abcdefghij\\\\\n" "" 187docommand param184 "$SHELL -c 'in=\$1; pre=\${1%?}; out=\${in#\"\$pre\"}; printf [%s] \"\$out\"' -- AB\\\"C" 0 "[C]" "" 188 189docommand param200 "$SHELL -c 'a=; printf \"<%s>\" \"\${a:-\"a b\"}\"'" 0 "<a b>" "" 190docommand param201 "$SHELL -c 'x=\"a*b\"; y=\"a[*]b\"; printf \"<%s>\" \"\${x#\$y}\"'" 0 "<>" "" 191docommand param202 "$SHELL -c 'x=\"a*b\"; y=\"a[*]b\"; printf \"<%s>\" \"\${x#\"\$y\"}\"'" 0 "<a*b>" "" 192 193success 194