Большая часть кода, который я пишу, написана на PHP. Я недавно начал изучать сценарии оболочки. Большинство ресурсов и учебных пособий, с которыми я сталкивался, относятся к Bash. Некоторые предупреждают о bashisms, а некоторые нет. Я много читал здесь и переполнение стека.
Всякий раз, когда в ответе используются ошибки , кто-то неизбежно комментирует:
Вы не должны использовать <вставьте здесь bashism>. Это не портативный.
Это происходит даже тогда, когда вопрос был помечен bash. Для меня это все равно, что сказать программисту PHP, что они не должны использовать код, новый в PHP 5, потому что его нельзя использовать с PHP 4. Или сказать кому-то, что они не должны писать что-то для Mac, потому что его нельзя использовать на винде.
Когда я пишу в PHP, я выбираю минимальное требование , и я пишу вперед -совместимый код. Я не беспокоюсь о том, чтобы сделать его обратно- совместимым.
Если я использую #!/bin/bash
в качестве шебанга, почему я не должен использовать bashisms? Я начинаю , чтобы получить впечатление , что некоторые люди просто любят Баш bashisms (каламбур) только ради этого.
Люди часто используют bash
и shell
взаимозаменяемо - вероятно, из-за того, что bash является оболочкой по умолчанию во многих системах. Таким образом, я могу понять добавление комментария, предупреждающего, что код использует bashisms, но я не понимаю, что их использование неправильно .
Очевидно, что если я пишу сценарий исключительно для личного использования, я могу написать его на любом языке, который захочу. Но я хотел бы думать, что часть написанного мной кода может быть полезна для других.
Я пытался найти ответ на свой вопрос перед публикацией. Я нашел много информации о том, как проверить переносимость, но не смог найти ничего, когда это важно сделать.
Итак, когда важно писать переносимые сценарии?
Например,
- какие типы сценариев должны быть максимально переносимыми?
- Насколько распространены системы, в которых не установлен Bash?
- если в системе установлен Bash, будет ли у него также версия GNU find и другие утилиты?
bash
только один тег, кто-то комментирует: «Это башизм, а не переносимость». Когда я отвечаю на вопрос, помеченный тегами C
, мне все равно, переносим он Java
или нет.
bash
особая функция, а не переносимая, точно так же, как я бы отметил, что для какой-либо утилиты используется расширение, специфичное для GNU (даже если вопрос был помечен как Linux). Я никогда не видел, чтобы кто-нибудь говорил: «Это башизм, и вы никогда не должны его использовать».