Я использую следующий код и не удалось.

$ echo $TERM
xtermc
$ v=/bin:/usr/bin:/usr/local/bin ; echo $v | tr ':' '\n'
/binn/usr/binn/usr/local/bin

Кажется, пропустить мой '/'. Я не знаю, как это решить. Моя оболочка это зш. Я перешел на bash, но все равно не смог.

Но на другой машине это работает. и результат

/bin
/usr/bin
/usr/local/bin

Я нашел там три тр

/usr/local/bin/tr (GNU coreutils) 6.4
/usr/ucb/tr unkown version size 9916 bytes
/bin/tr size 19400 Usage: /bin/tr [ -cds ] [ String1 [ String2 ] ]

2 ответа2

1

Проблема вызвана различными настройками TR и PATH.

works: /usr/local/bin/tr (GNU coreutils) 6.4
failed: /usr/ucb/tr unkown version size 9916 bytes
works: /bin/tr size 19400 Usage: /bin/tr [ -cds ] [ String1 [ String2 ] ]
0

Поскольку вы используете zsh, вы можете использовать этот подход и больше не полагаться на какие-либо внешние команды:

$ v=/bin:/usr/bin:/usr/local/bin; print -l ${(s.:.)v}
/bin
/usr/bin
/usr/local/bin

Как это устроено:

  • флаг расширения параметра (s.:.) разделяет параметр $v на двоеточия (см. man zshexpn)
  • print -l печатает каждый следующий аргумент в одной строке

Если вы полагаетесь на символ новой строки, используйте

$ print ${v//:/\\n}

где //from/to выполняет глобальный (два начальных слеша) поиска и замены.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .