hush: fix globbing+backslashes in unquoted $var expansion

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
This commit is contained in:
Denys Vlasenko
2010-09-06 10:26:37 +02:00
parent d383b49aef
commit c49d2d9793
5 changed files with 172 additions and 88 deletions

View 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

View 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: $?