Похоже, что у вас grep
aliased to grep --color=always
или что-то подобное. Вы можете проверить это, запустив type grep
. Я могу воспроизвести подобное поведение:
$ var=$(ls -1 | grep --color=always "^rm")
$ echo ${var:0:1}
## Weird boxed character appears here
Чтобы лучше увидеть, что происходит, мы можем передать $var
через od
:
$ echo "$var" | od -c
0000000 033 [ 0 1 ; 3 1 m 033 [ K r m 033 [ m
0000020 033 [ K _ 0 8 1 8 - 0 5 1 7 5 2 -
0000040 7 5 3 - 0 6 \n
0000047
The 033 [ 0 1 ; 3 1 m 033 [ K
являются ANSI color escapes, и это то, что здесь ломается. Вы можете избежать этого, используя несглаженную версию grep
:
/bin/grep '^rm_'
или
\grep '^rm_'
Еще лучше не разбирать ls
, поскольку это часто приводит к другим проблемам. Более безопасный и простой способ сделать то, что вы хотите:
$ var="rm*"
$ echo $var
rm_0818-051752-753-06
$ echo ${var:0:1}
r