2016-09-09 2 views
0

Запуск Bash 3.2 на Mac. В терминале, я типа в следующем echo команды и возвращает текст с зеленым фоном и синим шрифтом:Синтаксис для команды Echo - Укладка цвета ANSI в Bash

echo "\033[34;42mThis is colored.\033[0m This is not colored." 

Я хочу, чтобы захватить эту команду в Баш скрипт, но не может получить его для правильного отображения.

Очень новый колотить, так вот что я обнаружил до сих пор:

  • Я знаю, что одиночные кавычки '' средство отображения его буквально, как написано, что это не то, что я хочу
  • Он должен быть в формате var=$(command) так знает переводчик, чтобы запустить его в качестве команды
  • я затем отобразить переменную, введя echo $var

так что это правильный способ написать эту команду в сценарии bash? Есть ли еще какие-то важные вещи, которые я должен знать как новичок в bash? Благодарю.

my.sh

#!/bin/bash 

teepee=$(echo "\033[34;42mThis is colored.\033[0m This is not colored.") 
echo $teepee 
+0

Почему не просто установить teepee для строки вместо того, чтобы использовать эхо бесполезно в подоболочке? – 123

+0

@ 123 Я не думаю, что я понимаю ваш вопрос, но 'a)' не является точкой сценария, чтобы он мог захватить группу команд для более быстрого/легкого использования в будущем? и 'b)' Я устанавливаю teepee в строку, но вам нужна команда 'echo' для стилизации. Еще раз, я хочу, чтобы он был включен в скрипт, чтобы сделать его переменной, которую я могу вызвать в будущем. – Kervvv

ответ

0

После некоторого копания, мне нужно, чтобы добавить -e опцию к echo команды, что позволяет обратную косую интерпретацию (найти более подробную информацию here)

#!/bin/bash 

teepee=$(echo -e "\033[34;42mThis is colored.\033[0m This is not colored.") 
echo $teepee #works as expected 
+0

В man-странице эха в OSX не упоминается параметр -e, но он правильный, по умолчанию echo не интерпретирует обратную косую черту. – Dorian

+1

Вы можете использовать 'teepee = $ '\ e [34; 42mThis окрашен. \ E \ [0mThis не окрашен." ', Чтобы избежать ненужной подоболочки. – chepner

+0

@Dorian. Это абсолютно задокументировано:« Если опция -e задано, интерпретация , следующих за символами с обратным слэшем, включена ". Это' 'bash' встроенное' echo', а не внешняя программа (которая * не требует * -e', потому что обрабатывает экранированные символы по мере необходимости по стандарту POSIX). Встроенный 'bash' явно * не * POSIX-совместимый (хотя есть опция времени сборки, чтобы сделать так:' echo' - беспорядок и должен быть заменен 'printf', если вы хотите любой вид предсказуемого поведения.) – chepner

Смежные вопросы