1#! /bin/sh 2# 3# @(#)cmdsub.sh 1.8 20/06/21 Copyright 2016-2020 J. Schilling 4# 5 6# Read test core functions 7. ../../common/test-common 8 9docommand A1 "$SHELL cmdsub-A1" 0 "x\n" "" 10docommand A2 "$SHELL cmdsub-A2" 0 "x\n" "" 11docommand A3 "$SHELL cmdsub-A3" 0 "x\n" "" 12docommand A4 "$SHELL cmdsub-A4" 0 "x\n" "" 13docommand A5 "$SHELL cmdsub-A5" 0 "x\n" "" 14 15docommand B "$SHELL cmdsub-B" 0 "quoted )\n" "" 16 17docommand C "$SHELL cmdsub-C" 0 "comment\n" "" 18 19docommand D1 "$SHELL cmdsub-D1" 0 "here-doc with )\n" "" 20docommand D2 "$SHELL cmdsub-D2" 2 "" IGNORE 21docommand D3 "$SHELL cmdsub-D3" 0 "here-doc with \\()\n" "" 22 23docommand E "$SHELL cmdsub-E" 0 "here-doc terminated with a parenthesis\n" "" 24 25docommand F "$SHELL cmdsub-F" 0 "' # or a single back- or doublequote\n" "" 26 27docommand G "$SHELL cmdsub-G" 0 "\n" "" 28 29docommand H "$SHELL cmdsub-H" 0 "\n" "" 30 31# 32# This command substitution is used by Sven Maschek in "whatshell.sh" 33# 34if [ "$is_bosh" = true ]; then 35 36expect_fail_save=$expect_fail 37expect_fail=true 38docommand -silent -esilent cmdsub00 \ 39 "$SHELL -c 'set -o | grep \"posix.*on\" > /dev/null && echo YES || echo NO'" \ 40 0 "NO\n" "" 41expect_fail=$expect_fail_save 42if [ "$failed" = true ]; then 43 echo 44 echo "$SHELL is in POSIX mode, skipping test cmdsub01." 45 echo 46else 47 docommand cmdsub01 "$SHELL -c 'case \$( (:^times) 2>&1) in *0m*) echo OK;; *) echo FAIL;; esac'" 0 "OK\n" "" 48fi 49else 50 echo 51 echo "Not a Bourne Shell, skipping cmdsub01: ^ pipe test: \"(:^times)\"" 52 echo 53fi 54 55# 56# Check whether $() allows to include complex strings that contain newlines 57# 58cat > x <<"XEOF" 59: ${AWK=/usr/bin/nawk} 60#$AWK 'BEGIN {print rand()}' < /dev/null > /dev/null 2> /dev/null || AWK=/usr/bin/nawk 61$AWK 'BEGIN {print rand()}' < /dev/null > /dev/null 2> /dev/null || AWK=/usr/bin/gawk 62$AWK 'BEGIN {print rand()}' < /dev/null > /dev/null 2> /dev/null || AWK=/usr/bin/awk 63$AWK 'BEGIN {print rand()}' < /dev/null > /dev/null 2> /dev/null || AWK=nawk 64$AWK 'BEGIN {print rand()}' < /dev/null > /dev/null 2> /dev/null || AWK=gawk 65$AWK 'BEGIN {print rand()}' < /dev/null > /dev/null 2> /dev/null || AWK=awk 66 67seed= 68rand() { 69 eval "$( 70 $AWK -v range="$1" ' 71 BEGIN { 72 srand('"$seed"') 73 print "seed=" int(rand() * 2^31) 74 print "echo " int(rand() * range) 75 }')" 76} 77 78rand 100000000 79rand 100000000 80XEOF 81docommand cmdsub02 "$SHELL ./x" 0 IGNORE "" 82 83# 84# Check whether "didnl" in func.c is correctly reset. 85# 86docommand cmdsub03 "$SHELL -c 'echo \$( printf a; printf b ) 87: \$( 88cat << HERE 89HERE 90) 91echo \$( printf a; printf b ) '" 0 "ab\nab\n" "" 92 93# 94# Check whether a redirected comand group { ...; } works. 95# 96docommand cmdsub04 "$SHELL -c 'var=\$({ echo value >&3; } 3>&1); echo \$var'" 0 "value\n" "" 97 98remove x 99success 100