hush: fix globbing+backslashes in unquoted $var expansion
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
This commit is contained in:
18
shell/hush_test/hush-glob/glob2.right
Normal file
18
shell/hush_test/hush-glob/glob2.right
Normal file
@@ -0,0 +1,18 @@
|
||||
Expected Actual
|
||||
Z\* : Z\*
|
||||
Z* : Z*
|
||||
Z\f : Z\f
|
||||
Z\* : Z\*
|
||||
|
||||
Z\z : Z\z
|
||||
Zz : Zz
|
||||
Z\z : Z\z
|
||||
Z\z : Z\z
|
||||
|
||||
Z\ : Z\
|
||||
Z\ : Z\
|
||||
|
||||
Z\f Zf : Z\f Zf
|
||||
Z\f Zf : Z\f Zf
|
||||
|
||||
Done: 0
|
27
shell/hush_test/hush-glob/glob2.tests
Executable file
27
shell/hush_test/hush-glob/glob2.tests
Executable file
@@ -0,0 +1,27 @@
|
||||
# This test demonstrates that in unquoted $v, backslashes expand by this rule:
|
||||
# \z -> \\\z; \<eol> -> \\<eol> (for any z, special or not),
|
||||
# and subsequently globbing converts \\ to \ and treats \z as literal z
|
||||
# even if it is a special char.
|
||||
|
||||
>'Zf'
|
||||
>'Z\f'
|
||||
echo 'Expected' 'Actual'
|
||||
v='\*'; echo 'Z\* :' Z$v
|
||||
echo 'Z* :' Z\*
|
||||
echo 'Z\f :' Z\\*
|
||||
echo 'Z\* :' Z\\\* # NB! only this matches Z$v output
|
||||
echo
|
||||
v='\z'; echo 'Z\z :' Z$v
|
||||
echo 'Zz :' Z\z
|
||||
echo 'Z\z :' Z\\z
|
||||
echo 'Z\z :' Z\\\z
|
||||
echo
|
||||
v='\'; echo 'Z\ :' Z$v
|
||||
echo 'Z\ :' Z\\
|
||||
echo
|
||||
v='*'; echo 'Z\f Zf :' Z$v
|
||||
echo 'Z\f Zf :' Z*
|
||||
echo
|
||||
|
||||
rm 'Z\f' 'Zf'
|
||||
echo Done: $?
|
Reference in New Issue
Block a user