Bash word splitting mechanism

前端 未结 3 1221
野趣味
野趣味 2020-12-06 04:09

I am new to Bash and I am seeing that there is automatic word splitting done by Bash:

a=\"1  2     3 4\"

If I echo \"a\" by echo $a

3条回答
  •  盖世英雄少女心
    2020-12-06 04:23

    There are actually several rounds of word-splitting. The first is performed prior to parsing the command line, so echo $a is split into two words echo and $a. (This is why something like a="echo foo | wc -l"; $a doesn't execute a pipeline; parsing is complete before $a is expanded). After that round of word-splitting is over, parameter expansion occurs to produce 2 strings, echo and 1 2 3 4. The string resulting from parameter expansion then undergoes word-splitting itself, since it is not quoted, producing 4 additional words 1, 2, 3, and 4.

    In a for loop, the items in the list are subject to word-splitting:

    for b in $a; do
    

    is expanded (after word-splitting produces for, b, in, $a, ;, and do) to for, b, in, 1 2 3 4, ;, and do. Again the string resulting from parameter expansion undergoes word-splitting to 1, 2, 3, and 4.

提交回复
热议问题