среда, 16 сентября 2015 г.

here document & here string

Получило распорстранение  в языках программирования из Unix shell-ов - для переопределения инпут потока команды не из файла, а прямо в консоли, - в языках программирования это мультистрочность строки.

Heredoc


tr a-z A-Z << ANY_NAME_WHICH_SPECIFIED_AS_DELIMETER
one two three
four five six
ANY_NAME_WHICH_SPECIFIED_AS_DELIMETER

ANY_NAME_WHICH_SPECIFIED_AS_DELIMETER - традиционно чаще всего выбираются EOF, END, DELIM; ну а вообще мы можем поставить все что угодно

Пробел не имеет значения мы можем и без пробела написать <<EOF

tr a-z A-Z <<- END
         one two three
         four five six
         END
<<- означает, что нужно игнорировать встречающиеся во вводе табы.

По-умолчанию переменные среды и команды вызываются в теле текста:
cat <<EOF
\$ Working dir "$PWD" `pwd`
EOF

$ Working dir "/home/user" /home/user

Чтобы это вырубить обвертываем ограничитель единичными кавычками:
cat <<'EOF'
\$ Working dir "$PWD" `pwd`
EOF

$ Working dir "$PWD" `pwd`

Here string

Переопределение идет строкой, если без одинарных ковычек, то словом.
cat <<'EOF'
tr a-z A-Z <<< one
tr a-z A-Z <<< 'one two three'
Мультистрочность тоже работает:
 tr a-z A-Z <<< '
 one
 two three
 '
Тогда возникает вопрос в чем отличие от here document? Отличие в том, что тут переносы строки сохраняются в нача и конце, в heredoc - нет:
 
ONE
TWO THREE
 
Here string полезен для команд которые требуют коротнкий инпут, например калькулятор:
bc <<< 2^10

Комментариев нет:

Отправить комментарий