Linux foo что это

Имена для метапеременных

Метапеременные — это слова-заменители, которые применяются в технических текстах для обозначения чего-либо, что может стоять на их месте, метапеременные часто используются в программировании.

Есть две легендарных метапеременных — это foo и bar . Они прекрасны — короткие, одинаковой длины, отличаются друг от друга, легко произносятся. А вот если нам необходимо больше метапеременных? Тут уже нету чётких правил. Обычно используются baz и bat. Но они имеют существенный недостаток — очень схожее написание с bar. И еще более схожее звучание (при выступлениях глухие буквы в конце часто съедаются и получается «ба» вместо «бар» и«бат»)

На данном ресурсе сидит огромное количество программистов и я хотел бы предложить отказаться от традиции использовать baz и bat в качестве имени метапеременной, а также обсудить возможность замены их чем-нибудь другим.

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

Предложение высказано после обсуждения в топике «JavaScript. Ядро».

Почему бы не придумать к foo-bar еще набор названий, которые бы отвечали следующим условиям:
— Длина — три буквы
— Кардинально отличаются внешним видом
— Кардинально отличаются произношением
— Легко и чётко произносятся. Должен быть 1 слог.

Например, я предлагаю следующий набор:

Quux использовал т.к. он есть традиционной четвертой переменной, и звучит, имхо, лучше, чем qux. Но при этом выбивается из «ритма» трехбуквенных переменных.

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

Источник

Частые ошибки программирования на Bash (продолжение)

11. cat file | sed s/foo/bar/ > file

Нельзя читать из файла и писать в него в одном и том же конвейере. В зависимости от того, как построен конвейер, файл может обнулиться (или оказаться усечённым до размера, равному объёму буфера, выделяемого операционной системой для конвейера), или неограниченно увеличиваться до тех пор, пока он не займёт всё доступное пространство на диске, или не достигнет ограничения на размер файла, заданного операционной системой или квотой, и т.д.

Если вы хотите произвести изменение в файле, отличное от добавления данных в его конец, вы должны в какой-то промежуточный момент создать временный файл. Например (этот код работает во всех шеллах):

Следующий фрагмент будет работать только при использовании GNU sed 4.x и выше:

Обратите внимание, что при этом тоже создаётся временный файл и затем происходит переименование — просто это делается незаметно.

В BSD-версии sed необходимо обязательно указывать расширение, добавляемое к запасной копии файла. Если вы уверены в своем скрипте, можно указать нулевое расширение:

Также можно воспользоваться perl 5.x, который, возможно, встречается чаще, чем sed 4.x:

Различные аспекты задачи массовой замены строк в куче файлов обсуждаются в Bash FAQ #21.

12. echo $foo

Эта относительно невинно выглядящая команда может привести к неприятным последствиям. Поскольку переменная $foo не заключена в кавычки, она будет не только разделена на слова, но и возможно содержащийся в ней шаблон будет преобразован в имена совпадающих с ним файлов. Из-за этого bash-программисты иногда ошибочно думают, что их переменные содержат неверные значения, тогда как с переменными всё в порядке — это команда echo отображает их согласно логике bash, что приводит к недоразумениям.

Это сообщение разбивается на слова и все шаблоны, такие, как *.zip , раскрываются. Что подумают пользователи вашего скрипта, когда увидят фразу:

На самом деле, команда echo вообще не может быть использована абсолютно безопасно. Если переменная содержит только два символа «-n», команда echo будет рассматривать их как опцию, а не как данные, которые нужно вывести на печать, и абсолютно ничего не выведет. Единственный надёжный способ напечатать значение переменной — воспользоваться командой printf :
printf «%s\n» «$foo» .

13. $foo=bar

Нет, вы не можете создать переменную, поставив «$» в начале её названия. Это не Perl. Достаточно написать:

14. foo = bar

Нет, нельзя оставлять пробелы вокруг «=», присваивая значение переменной. Это не C. Когда вы пишете foo = bar , оболочка разбивает это на три слова, первое из которых, foo , воспринимается как название команды, а оставшиеся два — как её аргументы.

По этой же причине нижеследующие выражения также неправильны:

15. echo EOF ) на входной поток команды. К сожалению, echo не принимает данные с STDIN.

16. su -c ‘some command’

В Linux этот синтаксис корректен и не вызовет ошибки. Проблема в том, что в некоторых системах (например, FreeBSD или Solaris) аргумент -c команды su имеет совершенно другое назначение. В частности, в FreeBSD ключ -c указывает класс, ограничения которого применяются при выполнении команды, а аргументы шелла должны указываться после имени целевого пользователя. Если имя пользователя отсутствует, опция -c будет относиться к команде su, а не к новому шеллу. Поэтому рекомендуется всегда указывать имя целевого пользователя, вне зависимости от системы (кто знает, на каких платформах будут выполняться ваши скрипты. ):

17. cd /foo; bar

Если не проверить результат выполнения cd , в случае ошибки команда bar может выполниться не в том каталоге, где предполагал разработчик. Это может привести к катастрофе, если bar содержит что-то вроде rm * .

Поэтому всегда нужно проверять код возврата команды «cd». Простейший способ:

Если за cd следует больше одной команды, можно написать так:

cd сообщит об ошибке смены каталога сообщением в stderr вида bash: cd: /foo: No such file or directory . Если вы хотите вывести своё сообщение об ошибке в stdout, следует использовать группировку команд:

Некоторые добавляют в начало скрипта команду set -e , чтобы их скрипты прерывались после каждой команды, вернувшей ненулевое значение, но этот трюк нужно использовать с большой осторожностью, поскольку многие распространённые команды могут возвращать ненулевое значение в качестве простого предупреждения об ошибке (warning), и совершенно необязательно рассматривать такие ошибки как критические.

Кстати, если вы много работаете с директориями в bash-скрипте, перечитайте man bash в местах, относящихся к командам pushd , popd и dirs . Возможно, весь ваш код, напичканный cd и pwd , просто не нужен :).

Вернёмся к нашим баранам. Сравните этот фрагмент:

Принудительный вызов подоболочки заставляет cd и последующие команды выполняться в subshell’е; в следующей итерации цикла мы вернёмся в начальное местонахождение вне зависимости от того, успешной ли была смена директории или же она завершилась с ошибкой. Нам не нужно возвращаться вручную.

Кроме того, предпоследний пример содержит ещё одну ошибку: если одна из команд whatever провалится, мы можем не вернуться обратно в начальный каталог. Чтобы исправить это без использования субшелла, в конце каждой итерации придётся делать что-то вроде cd «$ORIGINAL_DIR» , а это добавит ещё немного путаницы в ваши скрипты.

18. [ bar == «$foo» ]

Оператор == не является аргументом команды [ . Используйте вместо него = или замените [ ключевым словом [[ :

19. for i in <1..10>; do ./something &; done

Нельзя помещать точку с запятой «;» сразу же после &. Просто удалите этот лишний символ:

Символ & сам по себе является признаком конца команды, так же, как «;» и перевод строки. Нельзя ставить их один за другим.

20. cmd1 && cmd2 || cmd3

Многие предпочитают использовать && и || в качестве сокращения для if . then . else . fi . В некоторых случаях это абсолютно безопасно:

Однако в общем случае эта конструкция не может служить полным эквивалентом if . fi , потому что команда cmd2 перед && также может генерировать код возврата, и если этот код не 0 , будет выполнена команда, следующая за ||. Простой пример, способный многих привести в состояние ступора:

Что здесь произошло? По идее, переменная i должна принять значение 1, но в конце скрипта она содержит 0. То есть последовательно выполняются обе команды i++ и i—. Команда ((i++)) возвращает число, являющееся результатом выполнения выражения в скобках в стиле C. Значение этого выражения — 0 (начальное значение i), но в C выражение с целочисленным значением 0 рассматривается как false. Поэтому выражение ((i++)), где i равно 0, возвращает 1 (false) и выполняется команда ((i—)).

Этого бы не случилось, если бы мы использовали оператор преинкремента, поскольку в данном случае код возврата ++i — true:

Но нам всего лишь повезло и наш код работает исключительно по «случайному» стечению обстоятельств. Поэтому нельзя полагаться на x && y || z , если есть малейший шанс, что y вернёт false (последний фрагмент кода будет выполнен с ошибкой, если i будет равно -1 вместо 0)

Если вам нужна безопасность, или вы сомневаетесь в механизмах, которые заставляют ваш код работать, или вы ничего не поняли в предыдущих абзацах, лучше не ленитесь и пишите if . fi в ваших скриптах:

Bourne shell это тоже касается:

21. Касательно UTF-8 и BOM (Byte-Order Mark, метка порядка байтов)

В общем: в Unix тексты в кодировке UTF-8 не используют метки порядка байтов. Кодировка текста определяется по локали, mime-типу файла, или по каким-то другим метаданным. Хотя наличие BOM не испортит UTF-8 документ в плане его читаемости человеком, могут возникнуть проблемы с автоматической интерпретацией таких файлов в качестве скриптов, исходных кодов, файлов конфигурации и т.д. Файлы, начинающиеся с BOM, должны рассматриваться как чужеродные, так же как и файлы с DOS’овскими переносами строк.

Источник

Какова история использования «foo» и «bar» в примерах исходного кода?

Почему многие примеры кода, особенно учебные пособия, так часто используют имена «Foo» и «Bar»? Это почти стандарт.

Foo и bar происходят от аббревиатуры Второй мировой войны армии США FUBAR, «F-ed Up Beyond All Recognition». Целое семейство этих терминов широко использовалось в ходе кампаний в Северной Африке и на Сицилии (1942-43). Превосходный День битвы: Война на Сицилии и в Италии, 1943-1944 гг., Рик Аткинсон приводит список из них. Например, JANFU — это «Объединенный военно-морской флот F Up», такой как инцидент 11 июля 1943 года, когда флот вторжения для операции «Хаски» сбил 23 армейских ВВС C-47, перевозящих десантников для усиления плацдарма.

Обновление: Википедия имеет список связанных сокращений, который включает некоторые оригинальные Второй мировой войны, перечисленные Аткинсоном.

Любой программист поймет мотивацию использования foo и bar для именования переменных. Они, безусловно, были частью культуры C / UNIX с самого начала, и, как указывает @Walter Mitty, предшествовали этому.

Обновление (05.10.2009): вот описание Аткинсона:

Их повсеместная «гражданственность» заставляла их опасаться боевого усердия. «Мы не были романтиками, наполненными болтовней накидки и меча», — писал Джон Мейсон Браун, лейтенант военно-морского резерва, направляющийся в Сицилию. «Последняя война была слишком близка для этого». Военная жизнь разжигала их иронические чувства и их скептицизм. Единственная грубая аббревиатура, которая захватила пониженные ожидания солдата — SNAFU, «ситуация нормальная, все испорчено» — расширилась до словаря цинизма GI: SUSFU (ситуация не изменилась, все еще испорчена); FUMTU (облажался больше, чем обычно); ДЖАНФУ (совместное соединение армии и флота); JAAFU (совместный англо-американский дебил); FUAFUP (облажался и облажался должным образом); и FUBAR (облажался до неузнаваемости) [Аткинсон, с. 36].

Обновление (23.11.2011): у @Hugo фантастический список невоенных предшественников.

Я думаю, что это фонетическое произношение фубара.

В «Словаре нового хакера» есть очень хорошая статья об этом — и я считаю, что это лучший ресурс для такого рода вещей, чем Википедия:

Имя, используемое в примерах и понимаемое для обозначения того, что обсуждается, или любого случайного члена класса обсуждаемых вещей. Слово foo является каноническим примером. Чтобы избежать путаницы, хакеры никогда (ну, почти никогда) не используют `foo ‘или другие подобные слова в качестве постоянных имен для чего-либо. В именах файлов распространенным соглашением является то, что любое имя файла, начинающееся с имени метасинтаксической переменной, является рабочим файлом, который может быть удален в любое время.

В некоторой степени список предпочтительных метасинтаксических переменных является культурной сигнатурой. Они встречаются как последовательно (используются для связанных групп переменных или объектов), так и в виде синглетонов. Вот несколько распространенных подписей:

foo, bar, baz, quux, quuux, quuuux . использование
MIT / Stanford, теперь встречающееся повсеместно (во многом благодаря ранним версиям этого лексикона!). В Массачусетском технологическом институте (но не в Стэнфорде) баз некоторое время выходил из употребления в 1970-х и 80-х годах. Обычная недавняя мутация этой последовательности вставляет qux перед quux.

Базола, ztesch:
Стэнфорд (с середины 70-х годов).

foo, bar, thud, grunt:
этот сериал был популярен в CMU. Другие переменные, связанные с CMU, включают gorp.

foo, bar, fum:
Сообщается, что эта серия распространена на XEROX PARC.

Фред, Барни:
см. запись для Фред. Это, как правило, британцы.

corge, grault, flarp:
популярный в университете Rutgers и среди хакеров GOSMACS.

zxc, spqr, wombat:
Кембриджский университет (Англия).

Шме
Беркли, GeoWorks, Ingres. Произносится / шме / с коротким / е /.

Университет
Брауна, начало 1970-х годов.

foo, bar, zot
Хельсинкский технологический университет, Финляндия.

blarg, качать
Новая Зеландия.

Тото, Тити, Тата, пачка
Франция.

Пиппо, Плутон, Paperino
Италия. Pippo / pee’po / и Paperino / pa-per-ee’-no / — итальянские названия для Гуфи и Дональда Дака.

aap, noot, mies
Нидерланды. Это первые слова, которые ребенок использовал, чтобы научиться писать по буквам на голландской орфографической доске.

Из всего этого, только ‘foo’ и ‘bar’ универсальны (а baz почти так). Составы foobar и `foobaz ‘также имеют очень широкую валюту.

Некоторые жаргонные термины также используются как метасинтаксические имена; например, бормочет и бормочет. См. Также Commonwealth Hackish для обсуждения многочисленных метасинтаксических переменных, найденных в Великобритании и Содружестве.

В компьютерных науках программисты используют метасинтаксические переменные для описания имени заполнителя или псевдонима, обычно используемого для обозначения обсуждаемого предмета или произвольного члена класса обсуждаемых вещей. Использование метасинтаксической переменной помогает освободить программиста от создания переменной с логическим именем, что часто полезно при создании или обучении примерам алгоритма. Слово foo является основным примером.
Термин «метасинтаксическая переменная» в основном встречается в неформальной литературе. Иногда он также используется в качестве синонима мета-переменной.
Любой символ или слово, которое не нарушает правила языка, может использоваться как метасинтаксическая переменная, но обычно используются бессмысленные слова. То же самое понятие используется в других областях, где это выражено такими терминами, как переменная схемы (см. Логическую форму ).
По математической аналогии: метасинтаксическая переменная — это слово, которое является переменной для других слов, так же как в алгебраических буквах используются в качестве переменных для чисел.

В статье также приведены общие примеры таких переменных на разных языках программирования:

C
В следующем примере языка программирования C имя функции foo и строка имени переменной являются метасинтаксическими переменными. Строки, начинающиеся с //, являются комментариями.

Спам, ветчина и яйца являются основными метасинтаксическими переменными, используемыми в языке программирования Python. [5] Это ссылка на знаменитый комедийный набросок «Спам» Монти Пайтона, одноименный язык. [6] В следующем примере спам, ветчина и яйца являются метасинтаксическими переменными, а строки, начинающиеся с #, являются комментариями.

В следующем примере baz, foo и bar являются метасинтаксическими переменными, а строки, начинающиеся с #, являются комментариями.

Вот ответ Википедии:

Термины foobar, foo, bar и baz являются общими именами-заполнителями (также называемыми метасинтаксическими переменными), используемыми в компьютерном программировании или документации, связанной с компьютером. Они обычно используются для представления неизвестных значений, как правило, при описании сценария, в котором цель неизвестных значений понятна, но их точные значения являются произвольными и неважными. Термины могут использоваться для обозначения любой части сложной системы или идеи, включая данные, переменные, функции и команды. Сами слова не имеют смысла в этом использовании и являются просто логическими представлениями, так же, как буквы x и y используются в алгебре. Foobar часто используется один; foo, bar и baz обычно используются в том порядке, когда требуется несколько сущностей.

Фу вошел в английский язык как неологизм и считается многими каноническим примером метасинтаксической переменной. [Цитата нужна] Он широко используется в примерах компьютерного программирования (иногда выражается как «только один раз») и псевдокоде. Эрик С. Рэймонд назвал это «важным хакерством» наряду с клуджем и храбростью. [1]

При использовании в связке с «баром» он, как правило, прослеживается до аббревиатуры армейского сленга FUBAR («Fucked Up Beyond All Repair»), позже измененной на foobar. Ранние версии Jargon File [JARGON] интерпретировали это изменение как послевоенную боулдеризацию, но теперь кажется более вероятным, что FUBAR сам был производным от ‘foo’, возможно под влиянием немецкого ‘furchtbar’ (ужасный) — ‘foobar’ может на самом деле была оригинальная форма.

Кажется, что само слово «foo» имело непосредственную довоенную историю в комиксах и мультфильмах. В мультфильме Warner Brothers 1938 года режиссера Роберта Клэмпетта «Даффи Док» очень ранняя версия «Даффи Дак» держит знак «SILENCE IS FOO!» . (отрывок)

Источник

Читайте также:  Автоматическое подключение beeline windows 10
Оцените статью