Строка коллапса вертикально так, чтобы каждое слово было на новой строке

Не ksh эксперт, но я думаю, что у Вас есть две проблемы в Вашем коде.

Первая проблема: Вы имеете к одинарной кавычке M$9001 иначе оболочка попытается расшириться $9001.

Вторая проблема: Вы не вкладываете [ ] внутри [ ]. Любое использование [[ ]] или два [ ].

Необходимо также заключить в кавычки $H_OR_T на всякий случай это расширяется до чего-то забавного.

Вот Ваш код, вероятно, исправленный:

if [[ "$H_OR_T" = 'M$9001' || "$H_OR_T" = 'M$9002' ]];

Или быть POSIX, совместимым и более портативным:

if [ "$H_OR_T" = 'M$9001' ] || [ "$H_OR_T" = 'M$9002' ];

Обратите внимание, что существуют тонкие различия между [ ] и [[ ]]. ksh documenation немного редок по этой теме. Это является лучшим, я нашел: вопрос о http://www.kornshell.com/doc/faq.html номер 10.

Q10. Между чем различие [...] и [[...]]?

A10. [[...]] обрабатывается как часть грамматики оболочки тогда как [...] обрабатывается как любая другая команда. Операторы и операнды обнаруживаются, когда команда читается, не после того, как расширения выполняются. Оболочка не делает разделения слова или поколения пути внутри [[...]]. Это позволяет шаблонам быть указанными в целях сопоставления строк.

3
08.07.2014, 20:26
1 ответ

Вы можете сделать это, заменив пробелы в строке на новые.

:%s/\s/\r/g

Это заменит на все строки(%s), все пробелы (\s) на новые (\r).

Вы можете удалить знак процента, чтобы ограничить замену на текущую строку.

7
27.01.2020, 21:12

Теги

Похожие вопросы