shells: add testsuite item
No binary (build failed)
—
(log yok)
| @@ -0,0 +1,25 @@ | |
| + | a is '\*bc' |
| + | b is '\' |
| + | c is '*' |
| + | ${a##?*} removes everything: || |
| + | ${a##?"*"} removes \*: |bc| - matches one char, then * |
| + | ${a##\*} removes nothing: |\*bc| - first char is not * |
| + | ${a##\\*} removes everything: || - matches \, then all |
| + | ${a##\\\*} removes \*: || - matches \, then * |
| + | ${a##?$c} removes everything: || - matches one char, then all |
| + | ${a##?"$c"} removes \*: |bc| - matches one char, then * |
| + | ${a##\\$c} removes everything: || - matches \, then all |
| + | ${a##\\"$c"} removes \*: |bc| - matches \, then * |
| + | ${a##$b} removes \: |*bc| - matches \ |
| + | ${a##"$b"} removes \: |*bc| - matches \ |
| + | |
| + | ${a##"$b"?} removes \*: |bc| - matches \, then one char |
| + | ${a##"$b"*} removes everything: || - matches \, then all |
| + | ${a##"$b""?"} removes nothing: |\*bc| - second char is not ? |
| + | ${a##"$b""*"} removes \*: |bc| - matches \, then * |
| + | ${a##"$b"\*} removes \*: |bc| - matches \, then * |
| + | ${a##"$b"$c} removes everything:|| - matches \, then all |
| + | ${a##"$b""$c"} removes \*: |bc| - matches \, then * |
| + | ${a##"$b?"} removes nothing: |\*bc| - second char is not ? |
| + | ${a##"$b*"} removes \*: |bc| - matches \, then * |
| + | ${a##"$b$c"} removes \*: |bc| - matches \, then * |
| @@ -0,0 +1,37 @@ | |
| + | a='\*bc' |
| + | b='\' |
| + | c='*' |
| + | echo "a is '$a'" |
| + | echo "b is '$b'" |
| + | echo "c is '$c'" |
| + | echo '${a##?*} removes everything: '"|${a##?*}|" |
| + | echo '${a##?"*"} removes \*: '"|${a##?"*"}|"' - matches one char, then *' |
| + | echo '${a##\*} removes nothing: '"|${a##\*}|"' - first char is not *' |
| + | echo '${a##\\*} removes everything: '"|${a##\\*}|"' - matches \, then all' |
| + | echo '${a##\\\*} removes \*: '"|${a##\\*}|"' - matches \, then *' |
| + | echo '${a##?$c} removes everything: '"|${a##?$c}|"' - matches one char, then all' |
| + | echo '${a##?"$c"} removes \*: '"|${a##?"$c"}|"' - matches one char, then *' |
| + | echo '${a##\\$c} removes everything: '"|${a##\\$c}|"' - matches \, then all' |
| + | echo '${a##\\"$c"} removes \*: '"|${a##\\"$c"}|"' - matches \, then *' |
| + | echo '${a##$b} removes \: '"|${a##$b}|"' - matches \' |
| + | echo '${a##"$b"} removes \: '"|${a##"$b"}|"' - matches \' |
| + | echo |
| + | ## In bash, this isn't working as expected |
| + | #echo '${a##$b?} removes \*: '"|${a##$b?}|"' - matches \, then one char' # bash prints |\*bc| |
| + | #echo '${a##$b*} removes everything: '"|${a##$b*}|"' - matches \, then all' # bash prints |\*bc| |
| + | #echo '${a##$b$c} removes everything: '"|${a##$b$c}|"' - matches \, then all' # bash prints |\*bc| |
| + | #echo '${a##$b"$c"} removes \*: '"|${a##$b"$c"}|"' - matches \, then *' # bash prints |\*bc| |
| + | ## the cause seems to be that $b emits backslash that "glues" onto next character if there is one: |
| + | ## a='\*bc'; b='\'; c='*'; echo "|${a##?$b*}|" # bash prints |bc| - the $b* works as \* (matches literal *) |
| + | ## a='\*bc'; b='\'; c='*'; echo "|${a##\\$b*}|" # bash prints |bc| |
| + | #echo |
| + | echo '${a##"$b"?} removes \*: '"|${a##"$b"?}|"' - matches \, then one char' |
| + | echo '${a##"$b"*} removes everything: '"|${a##"$b"*}|"' - matches \, then all' |
| + | echo '${a##"$b""?"} removes nothing: '"|${a##"$b""?"}|"' - second char is not ?' # bash prints |bc| |
| + | echo '${a##"$b""*"} removes \*: '"|${a##"$b""*"}|"' - matches \, then *' |
| + | echo '${a##"$b"\*} removes \*: '"|${a##"$b"\*}|"' - matches \, then *' |
| + | echo '${a##"$b"$c} removes everything:'"|${a##"$b"$c}|"' - matches \, then all' |
| + | echo '${a##"$b""$c"} removes \*: '"|${a##"$b""$c"}|"' - matches \, then *' |
| + | echo '${a##"$b?"} removes nothing: '"|${a##"$b?"}|"' - second char is not ?' # bash prints |bc| |
| + | echo '${a##"$b*"} removes \*: '"|${a##"$b*"}|"' - matches \, then *' # bash prints || |
| + | echo '${a##"$b$c"} removes \*: '"|${a##"$b$c"}|"' - matches \, then *' |
| @@ -0,0 +1,25 @@ | |
| + | a is '\*bc' |
| + | b is '\' |
| + | c is '*' |
| + | ${a##?*} removes everything: || |
| + | ${a##?"*"} removes \*: |bc| - matches one char, then * |
| + | ${a##\*} removes nothing: |\*bc| - first char is not * |
| + | ${a##\\*} removes everything: || - matches \, then all |
| + | ${a##\\\*} removes \*: || - matches \, then * |
| + | ${a##?$c} removes everything: || - matches one char, then all |
| + | ${a##?"$c"} removes \*: |bc| - matches one char, then * |
| + | ${a##\\$c} removes everything: || - matches \, then all |
| + | ${a##\\"$c"} removes \*: |bc| - matches \, then * |
| + | ${a##$b} removes \: |*bc| - matches \ |
| + | ${a##"$b"} removes \: |*bc| - matches \ |
| + | |
| + | ${a##"$b"?} removes \*: |bc| - matches \, then one char |
| + | ${a##"$b"*} removes everything: || - matches \, then all |
| + | ${a##"$b""?"} removes nothing: |\*bc| - second char is not ? |
| + | ${a##"$b""*"} removes \*: |bc| - matches \, then * |
| + | ${a##"$b"\*} removes \*: |bc| - matches \, then * |
| + | ${a##"$b"$c} removes everything:|| - matches \, then all |
| + | ${a##"$b""$c"} removes \*: |bc| - matches \, then * |
| + | ${a##"$b?"} removes nothing: |\*bc| - second char is not ? |
| + | ${a##"$b*"} removes \*: |bc| - matches \, then * |
| + | ${a##"$b$c"} removes \*: |bc| - matches \, then * |
| @@ -0,0 +1,37 @@ | |
| + | a='\*bc' |
| + | b='\' |
| + | c='*' |
| + | echo "a is '$a'" |
| + | echo "b is '$b'" |
| + | echo "c is '$c'" |
| + | echo '${a##?*} removes everything: '"|${a##?*}|" |
| + | echo '${a##?"*"} removes \*: '"|${a##?"*"}|"' - matches one char, then *' |
| + | echo '${a##\*} removes nothing: '"|${a##\*}|"' - first char is not *' |
| + | echo '${a##\\*} removes everything: '"|${a##\\*}|"' - matches \, then all' |
| + | echo '${a##\\\*} removes \*: '"|${a##\\*}|"' - matches \, then *' |
| + | echo '${a##?$c} removes everything: '"|${a##?$c}|"' - matches one char, then all' |
| + | echo '${a##?"$c"} removes \*: '"|${a##?"$c"}|"' - matches one char, then *' |
| + | echo '${a##\\$c} removes everything: '"|${a##\\$c}|"' - matches \, then all' |
| + | echo '${a##\\"$c"} removes \*: '"|${a##\\"$c"}|"' - matches \, then *' |
| + | echo '${a##$b} removes \: '"|${a##$b}|"' - matches \' |
| + | echo '${a##"$b"} removes \: '"|${a##"$b"}|"' - matches \' |
| + | echo |
| + | ## In bash, this isn't working as expected |
| + | #echo '${a##$b?} removes \*: '"|${a##$b?}|"' - matches \, then one char' # bash prints |\*bc| |
| + | #echo '${a##$b*} removes everything: '"|${a##$b*}|"' - matches \, then all' # bash prints |\*bc| |
| + | #echo '${a##$b$c} removes everything: '"|${a##$b$c}|"' - matches \, then all' # bash prints |\*bc| |
| + | #echo '${a##$b"$c"} removes \*: '"|${a##$b"$c"}|"' - matches \, then *' # bash prints |\*bc| |
| + | ## the cause seems to be that $b emits backslash that "glues" onto next character if there is one: |
| + | ## a='\*bc'; b='\'; c='*'; echo "|${a##?$b*}|" # bash prints |bc| - the $b* works as \* (matches literal *) |
| + | ## a='\*bc'; b='\'; c='*'; echo "|${a##\\$b*}|" # bash prints |bc| |
| + | #echo |
| + | echo '${a##"$b"?} removes \*: '"|${a##"$b"?}|"' - matches \, then one char' |
| + | echo '${a##"$b"*} removes everything: '"|${a##"$b"*}|"' - matches \, then all' |
| + | echo '${a##"$b""?"} removes nothing: '"|${a##"$b""?"}|"' - second char is not ?' # bash prints |bc| |
| + | echo '${a##"$b""*"} removes \*: '"|${a##"$b""*"}|"' - matches \, then *' |
| + | echo '${a##"$b"\*} removes \*: '"|${a##"$b"\*}|"' - matches \, then *' |
| + | echo '${a##"$b"$c} removes everything:'"|${a##"$b"$c}|"' - matches \, then all' |
| + | echo '${a##"$b""$c"} removes \*: '"|${a##"$b""$c"}|"' - matches \, then *' |
| + | echo '${a##"$b?"} removes nothing: '"|${a##"$b?"}|"' - second char is not ?' # bash prints |bc| |
| + | echo '${a##"$b*"} removes \*: '"|${a##"$b*"}|"' - matches \, then *' # bash prints || |
| + | echo '${a##"$b$c"} removes \*: '"|${a##"$b$c"}|"' - matches \, then *' |