Какая цель делает двоеточие встроенная подача?

Утилита перекода поддерживает HTML как одну из кодировки. (Можно даже указать версию HTML.) В направлении текста к объектам это также повторно кодирует символы неASCII в объекты; необходимо указать корректное входное кодирование (например, ASCII, latin1, utf-8, …).

recode utf8:html output-file.txt
recode l1..html file-to-recode.txt

45
15.12.2017, 20:07
7 ответов

Это появляется :s в Вашем сценарии используются вместо true. Если grep не находит соответствие в файле, это возвратит ненулевой код выхода; поскольку jw013 упоминает в комментарии, если errexit установлен, вероятно, -e на строке хижины сценарий вышел бы если любой из greps не удается найти соответствие. Очевидно, это не то, что хотел автор, таким образом, он добавил || : заставить статус выхода из той конкретной составной команды всегда обнулить, как более общее (по моему опыту), || true/|| /bin/true.

29
27.01.2020, 19:34
  • 1
    Понятное дело. Это было в понятии сценария сборки об/мин, и в то время как я не видел, что любой код выхода проверил в сценарии, я забыл полагать, что родительский процесс мог бы смотреть. –  Caleb 14.02.2012, 22:55
  • 2
    Если это так, я назвал бы это плохой практикой сценариев. Это функционально эквивалентно использованию true вместо этого, но семантическое намерение намного более ясно с true. : более подходит, когда явный NOP желаем. –  jw013 27.04.2012, 09:12
  • 3
    По моему опыту, это - обычная практика в сценариях об/мин. Это, вероятно, не должно быть, но там мы. –  mattdm 15.12.2017, 20:46

: встроенный также полезно с Bash, "присваивают значения по умолчанию" расширение оболочки, где расширение часто используется только для побочного эффекта, и расширенное значение выброшено:

# assign FOO=bar iff FOO is unset
: ${FOO:=bar}
36
27.01.2020, 19:34
  • 1
    Прибыл, сюда ища это, был экранирован, когда я видел этот шаблон в сценарии для объявления значений по умолчанию. –  ffledgling 18.06.2015, 13:33

Я могу думать о двух местах, которые я использовал : в прошлом.

while :
do
     shell commands
     some exit condition
done

Это - навсегда-цикл.

function doSomethingStub {
    :
}

Вставьте интерфейсную функцию, только для получения высокоуровневого потока корректного управления.

Одно использование я видел назад в Былые времена: Вместо a #!/bin/sh (или безотносительно), строка, Вы видели бы a : строка. Некоторые более старые Реальные ядра Unix или Реальные оболочки Unix использовали бы это, чтобы означать, что "я - сценарий оболочки, имею sh, выполняет меня". Как я вспоминаю, это было то, как раз в то самое время, когда csh предпринимал шаги как общую интерактивную оболочку.

21
27.01.2020, 19:34

Я, кажется, вспоминаю, что ранние версии оболочки не имели синтаксиса комментария. Строка, запускающаяся с : (который, вероятно, был бы фактическим исполняемым файлом, подобным /bin/true) была бы лучшая альтернатива.

Вот страница справочника для древней оболочки Thompson (никакое отношение); нет никакого упоминания ни о каком синтаксисе комментария.

8
27.01.2020, 19:34
  • 1
    Источник : был на самом деле индикатор маркировки для goto команда, в некоторой древней оболочке (я не знаю который). Маркировка : something мог действительно использоваться в качестве комментария, если бы не было никакого соответствия goto. Практика, застрявшая даже после goto исчезнувший. –  Gilles 'SO- stop being evil' 15.02.2012, 08:29

: встроенный уже был в оболочке Thompson — она документируется для Unix V6 в 1975. В оболочке Thompson, : обозначенный маркировка для goto команда. Если Вы никогда не пытались звонить goto на начале строки , та строка была эффективно комментарием.

Оболочка Bourne, предок Границы/POSIX окружает, поскольку мы знаем их, никогда не имел a goto то, что я знаю о, но сохраненный : как никакая-op команда (это уже присутствовало в Unix V7).

19
27.01.2020, 19:34

Я откопал старую ссылку: "Среда программирования UNIX" (c) 1984 Kernighan и Щукой.

Страница 147 (Программирование Shell) говорит это:

":" оболочка встроенная команда, которая действительно только оценивает ее аргументы и возвращает "true". Вместо этого [относящийся к примеру сценария], мы, возможно, использовали верный, который просто возвращает истинный статус выхода. (Существует также ложная команда.), Но ':' более эффективно, чем верный, потому что это не выполняет команду от файловой системы. [Курсив/акцент является моим.]

12
27.01.2020, 19:34

":" удобно для отладки.

DEBUGLOG=": debugfunction"

statement
statement
$DEBUGLOG arg1 arg2 ...
statement
statement

Выполнение обычно debugfunction никогда не выполняется так sh, просто переступает через noop (переменные, и подстановочные знаки расширены хотя). Если более подробно отладка требуется, удалите noop из переменной, и debugfunction называют с любыми аргументами, требуются.

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

: << COMMENT
all --statements --in --here
are now -a here document which are
passed to --the noop
COMMENT
8
27.01.2020, 19:34

Теги

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