coreutils: Punctuation Characters

 
 30.2.3 Punctuation Characters
 -----------------------------
 
 Punctuation characters are sorted by ASCII order (rule 2.2).
 
      $ touch    1.0.5_src.tar.gz    1.0_src.tar.gz
 
      $ ls -v -1
      1.0.5_src.tar.gz
      1.0_src.tar.gz
 
    Why is ‘1.0.5_src.tar.gz’ listed before ‘1.0_src.tar.gz’ ?
 
    Based on the ⇒algorithm Version-sort ordering rules. above, the
 strings are broken down into the following parts:
 
                1   vs  1               (rule 3, all digit characters)
                .   vs  .               (rule 2, all non-digit characters)
                0   vs  0               (rule 3)
                .   vs  _src.tar.gz     (rule 2)
                5   vs  empty string    (no more character in the file name)
      _src.tar.gz   vs  empty string
 
    The fourth parts (‘‘.’’ and ‘_src.tar.gz’) are compared lexically by
 ASCII order.  The character ‘‘.’’ (ASCII value 46) is smaller than ‘‘_’’
 (ASCII value 95) - and should be listed before it.
 
    Hence, ‘1.0.5_src.tar.gz’ is listed first.
 
    If a different character appears instead of the underscore (for
 example, percent sign ‘‘%’’ ASCII value 37, which is smaller than dot’s
 ASCII value of 46), that file will be listed first:
 
      $ touch   1.0.5_src.tar.gz     1.0%zzzzz.gz
      1.0%zzzzz.gz
      1.0.5_src.tar.gz
 
    The same reasoning applies to the following example: The character
 ‘‘.’’ has ASCII value 46, and is smaller than slash character ‘‘/’’
 ASCII value 47:
 
      $ cat input5
      3.0/
      3.0.5
 
      $ sort -V input5
      3.0.5
      3.0/