2015-06-08 3 views
0

Bash4 предлагает некоторые приятные функции, такие как globstar, ассоциативные массивы, встроенный файл карт и т. Д.Можно ли использовать функции Bash 4 в новостных сценариях?

Будет ли это значительно уменьшать переносимость моих скриптов, если я воспользуюсь этими функциями? Безопаснее ли придерживаться Bash 3?

+0

Я думаю, это зависит от того, какие ОС вы нацеливаете - вы исключаете все ящики Apple OS X, если вы используете 'bash4', поскольку Apple не выходит за рамки bash 3.2'. –

+3

Я действительно не вижу, как на это можно ответить, кроме как с фразой _it зависит _.... –

ответ

4

В зависимости от того, насколько портативным вы хотите быть.

Apple не отправляет Bash 4 на Mac OS X, так как Bash 4 использует GPLv3. Конечно, пользователи могут установить их сами, если захотят, но у большинства пользователей этого не будет.

Если вы хотите быть портативным для OS X, вы, вероятно, не должны полагаться на функции Bash 4. Однако, если вы не против просто переносить современные дистрибутивы GNU/Linux, то почти все они включают Bash 4, поэтому вы можете также положиться на них.

Кроме того, помните, что не все ОС даже корабль bash по умолчанию. Например, OpenBSD отправляет pdksh по умолчанию, и вам нужно явно установить Bash. Debian отправляет bash, но /bin/sh - это Dash, поэтому вам нужно явно использовать #!/bin/bash, если вы хотите перейти к настройкам Bash.

Если вам действительно нужна переносимость, вы должны придерживаться функций POSIX/Single-Unix-Specification. Однако, если вам нужно только запустить последние дистрибутивы GNU/Linux (и даже несколько лет), используя /bin/bash и предполагая, что это Bash 4, все должно быть хорошо.

+1

Я бы также предположил, что Python 2.x или Perl служат своего рода lingua franca через * nix-системы - вы «охватывают OS X и каждый дистрибутив Linux, о котором я могу думать. Во всяком случае, для подлинной мобильности Python выглядит лучше, чем Bash, так как сценарии Bash потребуют больше внешних команд в хост-системе, поэтому вы застряли с POSIX, если хотите действительно быть портативными, и это действительно ограничивает. (Конечно, иногда Bash все еще лучший инструмент для работы.) –

+0

@IvanX Python не включен в Arch Linux [базовые пакеты] (https://www.archlinux.org/groups/i686/base/) , и если вы его установите, '/ usr/bin/python' - это Python 3, а не Python 2 (который вы должны явно указывать как' python2'). Похоже, [ни Python, ни Perl не включены в базовую OpenBSD] (http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/bin/). Встроенные Linux, такие как OpenWRT, обычно не включают ни в свой базовый дистрибутив. Если вам нужна истинная переносимость, POSIX 'sh' - это путь. Если нет, используйте то, что вы предпочитаете, поскольку все они доступны в пакетных репозиториях практически на всех платформах. –

+0

Спасибо, Брайан, не знал об Арке и Питоне. Однако есть Perl, если вы не нацелены на встроенные linux. Я просто всегда чувствую себя настолько неудобным при работе с POSIX 'sh', но уверен, ваша точка зрения. –