1 |
#!/usr/bin/env bash |
2 |
# |
3 |
# Tests for bash's type flags on cells. Hopefully we don't have to implement |
4 |
# this, but it's good to know the behavior. |
5 |
# |
6 |
# OSH follows a Python-ish model of types carried with values/objects, not |
7 |
# locations. |
8 |
# |
9 |
# See https://github.com/oilshell/oil/issues/26 |
10 |
|
11 |
#### declare -i |
12 |
declare s |
13 |
s='1 ' |
14 |
s+=' 2 ' # string append |
15 |
declare -i i |
16 |
i='1 ' |
17 |
i+=' 2 ' # arith add |
18 |
declare -i j |
19 |
j=x # treated like zero |
20 |
j+=' 2 ' # arith add |
21 |
echo "$s|$i|$j" |
22 |
## stdout: 1 2 |3|2 |
23 |
|
24 |
#### append in arith context |
25 |
declare s |
26 |
(( s='1 ')) |
27 |
(( s+=' 2 ')) # arith add |
28 |
declare -i i |
29 |
(( i='1 ' )) |
30 |
(( i+=' 2 ' )) |
31 |
declare -i j |
32 |
(( j='x ' )) # treated like zero |
33 |
(( j+=' 2 ' )) |
34 |
echo "$s|$i|$j" |
35 |
## stdout: 3|3|2 |
36 |
|
37 |
#### declare array vs. string: mixing -a +a and () '' |
38 |
# dynamic parsing of first argument. |
39 |
declare +a 'xyz1=1' |
40 |
declare +a 'xyz2=(2 3)' |
41 |
declare -a 'xyz3=4' |
42 |
declare -a 'xyz4=(5 6)' |
43 |
argv.py "${xyz1}" "${xyz2}" "${xyz3[@]}" "${xyz4[@]}" |
44 |
## stdout: ['1', '(2 3)', '4', '5', '6'] |
45 |
|
46 |
#### declare array vs. associative array |
47 |
# Hm I don't understand why the array only has one element. I guess because |
48 |
# index 0 is used twice? |
49 |
declare -a 'array=([a]=b [c]=d)' |
50 |
declare -A 'assoc=([a]=b [c]=d)' |
51 |
argv.py "${#array[@]}" "${!array[@]}" "${array[@]}" |
52 |
argv.py "${#assoc[@]}" "${!assoc[@]}" "${assoc[@]}" |
53 |
## stdout-json: "['1', '0', 'd']\n['2', 'a', 'c', 'b', 'd']\n" |