hush: fix ${##}, ${#?}, ${#!} handling
function old new delta parse_dollar 786 820 +34 expand_one_var 1579 1592 +13 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 47/0) Total: 47 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
# now some funky ones.
|
||||
# ${V+word} "if V unset, then substitute nothing, else substitute word"
|
||||
# ${V:+word} "if V unset or '', then substitute nothing, else substitute word"
|
||||
# bash doesn't accept ${#+}. ash prints 0 (not $#).
|
||||
# bash doesn't accept ${#+}. ash prints 0 (not $#): "len of $+"
|
||||
echo _${#+}_ _${#:+}_
|
||||
# Forms with non-empty word work as expected in both ash and bash.
|
||||
echo _${#+z}_ _${#:+z}_
|
||||
|
||||
11
shell/ash_test/ash-vars/param_expand_len1.right
Normal file
11
shell/ash_test/ash-vars/param_expand_len1.right
Normal file
@@ -0,0 +1,11 @@
|
||||
One:1
|
||||
Two:2
|
||||
Three:3
|
||||
|
||||
One:1
|
||||
Two:2
|
||||
Three:3
|
||||
|
||||
Ok ${#$}: 0
|
||||
|
||||
Ok ${#!}: 0
|
||||
31
shell/ash_test/ash-vars/param_expand_len1.tests
Executable file
31
shell/ash_test/ash-vars/param_expand_len1.tests
Executable file
@@ -0,0 +1,31 @@
|
||||
# ${#c} for any single char c means "length of $c", including all special vars
|
||||
|
||||
false
|
||||
echo One:${#?}
|
||||
(exit 10)
|
||||
echo Two:${#?}
|
||||
(exit 100)
|
||||
echo Three:${#?}
|
||||
|
||||
echo
|
||||
echo One:${##}
|
||||
set -- 1 2 3 4 5 6 7 8 9 0
|
||||
echo Two:${##}
|
||||
set -- 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 \
|
||||
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 \
|
||||
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 \
|
||||
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
|
||||
echo Three:${##}
|
||||
|
||||
echo
|
||||
v=$$
|
||||
test "${#v}" = "${#$}"
|
||||
echo 'Ok ${#$}:' $?
|
||||
|
||||
echo
|
||||
sleep 0 &
|
||||
v=$!
|
||||
test "${#v}" = "${#!}"
|
||||
echo 'Ok ${#!}:' $?
|
||||
|
||||
# TODO: ${#-} ${#_}
|
||||
Reference in New Issue
Block a user