aa bb cc dd AAaa bb cc ddBB aa bb cc dd aa bb cc dd DDDDDaa bb cc ddEEEEE aa bb cc dd outside: 42 aa bb cc dd outside: assignment: 12 func () { echo func-inside } abcde 67890 12345 argv[1] = <> argv[1] = <> aa,bb JOBaa bb cc ddCONTROL ./comsub2.tests: line 69: p: command not found NOTFOUND ./comsub2.tests: line 76: p: command not found ./comsub2.tests: line 76: p: command not found expand_aliases off expand_aliases off outside: ./comsub2.tests: line 80: alias: p: not found alias e='echo inside redefine' expand_aliases off 1 expand_aliases on 2 expand_aliases on outside: ./comsub2.tests: line 90: alias: p: not found expand_aliases on 1 xx expand_aliases on 2 xx expand_aliases on outside: expand_aliases on inside: 12 22 42 outside: 42 2 newlines outside: 42 before: 1 2 after: 2 before: 1 2 after: 2 before: 1 2 after: 1 2 XnestedY a nested b one two 42 42 42 comsub21.sub 123 123 0 123 123 0 Mon Aug 29 20:03:02 EDT 2022 Mon Aug 29 20:03:02 EDT 2022 Mon Aug 29 20:03:02 EDT 2022 Mon Aug 29 20:03:02 EDT 2022 123 before 123 in for 123 comsub22.sub outside before: value inside before: value inside after: funsub inside: after false xxx outside after: funsub =====posix mode===== outside before: value comsub23.sub . declare -a a=([0]="1" [1]="2" [2]="3" [3]="4") declare -- int="2" after here-doc: 1 [1]- Running sleep 1 & [2]+ Running sleep 1 & [1]- Running sleep 1 & [2]+ Running sleep 1 & 17772 26794 17772 26794 we should try rhs comsub and funsub in here-documents after all they work here and work here after for uname after arith for 1) a[${ break;}] #? after select comsub24.sub a b c == 1 2 3 == 1 2 3 before return after func 1 2 3a b c 2 2 foobara b c declare -- IFS=" " *??? *??? yyy zzzz comsub25.sub argv[1] = argv[1] = argv[1] = argv[1] = <^A> argv[1] = <^A> argv[1] = <^A> argv[1] = <^A> argv[1] = <^A> argv[1] = <^A> argv[1] = <^?> argv[1] = <^?> argv[1] = <^?> argv[1] = <^?> argv[1] = <^?> argv[1] = <^?> argv[1] = argv[1] = argv[1] = argv[1] = argv[1] = argv[1] = argv[1] = <^A> argv[1] = <^A> argv[1] = <^A> argv[1] = <^A> argv[1] = <^A> argv[1] = <^A> argv[1] = <^A> argv[1] = <^A> argv[1] = <^A> argv[1] = <^A> argv[1] = <^?> argv[1] = <^?> argv[1] = <^?> argv[1] = <^?> argv[1] = <^?> argv[1] = <^?> argv[1] = <^?> argv[1] = <^?> argv[1] = <^?> argv[1] = <^?> argv[1] = argv[1] = argv[2] = argv[1] = argv[1] = argv[2] = argv[1] = argv[1] = argv[2] = argv[1] = argv[1] = argv[2] = argv[1] = argv[1] = argv[2] = argv[1] = argv[1] = argv[1] = argv[1] = argv[2] = argv[1] = argv[1] = comsub26.sub inside1-inside2-outside BEFOREAA BB CC AFTER BEFOREAA BB CC AFTER unbalanced braces}} combined comsubs combined comsubs inside after: var = inside after: 42 var = inside var=inside 42 after: 0 var = inside comsub27.sub declare -- x="0" declare -- x="a[]" declare -- x="a[]" declare -- x="" declare -- x="" a[${ unset x;}] declare -i x declare -- x="" ./comsub27.sub: line 36: ${ unset x;}: arithmetic syntax error: operand expected (error token is "${ unset x;}") declare -i x declare -- SECONDS="" declare -i SECONDS="0" declare -- x="0" declare -a x=([2]="a[]") declare -ai a=() ./comsub27.sub: line 61: b[]: bad array subscript ./comsub27.sub: line 61: b[]: bad array subscript declare -ai a=([0]="1" [1]="0" [2]="3") declare -Ai a=() ./comsub27.sub: line 71: b[]: bad array subscript ./comsub27.sub: line 71: b[]: bad array subscript declare -Ai a=([3]="0" [1]="0" )