Если вы не возражаете против внешнего вызова, используйте awk или sed:
$ string="first second third fourth"
$ echo "${string}" | awk '{print $1}' # will work even with tabs
first
$ echo "${string}" | sed -e "s/.*$//" # will fail on leading whitespace
first
Есть несколько правил. Важным в этом случае является то, что -
является операцией диапазона, поэтому вы можете сказать a-f
, а не abcdef
внутри класса. Включить -
в качестве литерала проще всего, если это последний символ в классе, но он может быть первым или любым концом диапазона.
Если вы хотите инвертировать набор символов, то первый символ должен быть ^
. Чтобы включить его как литерал, он не должен быть первым.
Поскольку ]
завершает класс, существует особый случай, который позволяет ему быть первым (или вторым, если первый символ ^
отрицает класс ), поэтому []abc]
является набором из 4 символов,a
b
c
или ]
.