Q:

what is the difference between pattern matching operators?

i have some questions about pattern matching operators.
what's difference between these examples
$ VAR=/usr/bin/iecset
$ echo ${VAR#*/}
  usr/bin/iecset

and
$ VAR=/usr/bin/iecset
$ echo ${VAR##*/}
  iecset

and
$ VAR=/usr/bin/iecset
$ echo ${VAR%*/}
  /bin/iecset

and
$ VAR=/usr/bin/iecset
$ echo ${VAR%%*/}

A:

The "pattern" here is a glob or extended glob pattern - most people call them wildcards.  The characters have a different meaning to those used in Regular Expressions.  So * means "zero or more of any character". 
${var#pattern}    # delete shortest match of pattern from left
${var##pattern}   # delete longest match of pattern from left 
${var%pattern}    # delete shortest match of pattern from right 
${var%%pattern}   # delete longest match of pattern from right 

Your examples:
(Bad idea to use uppercase variable names)
Hints:  

to delete from the left, the * goes on the left.
# delete from left, as # is on the left in "We are #1"
% delete from the right, as the % is on the right in 50%

var=/usr/bin/iecset
Remove the shortest string on the left ending in /
echo ${var#*/}
usr/bin/iecset

There are no characters to the left of the first /, remember that * means zero or more.  So the leftmost / is removed.
Remove the longest string on the left ending in /
echo ${var##*/}
iecset

The next two are wrong in your post!  To delete from the right, the * should be on the right of the /.
$ echo ${VAR%*/}      # WRONG
$ echo ${VAR%%*/}     # WRONG

I think you mean:
Delete the shortest string on the right starting with /
var=/usr/bin/iecset
echo ${var%/*}
/usr/bin

Delete the longest string on the right starting with /
echo ${var%%/*}

(blank line)

There are many other meta-characters other than * you can use.

