Ubuntu-OSXの互換性、使いやすさ、POSIXには#!/bin/shまたは#!/bin/bashを使用してください。

Ubuntu-OSXの互換性、使いやすさ、POSIXには#!/bin/shまたは#!/bin/bashを使用してください。

私は、必要なシェルを呼び出すためにスクリプトの最初の行としてこれらのいずれかを使用できることを知っています。

#!/bin/shすべてのUNIXシステムとの互換性が絶対的な要件であることをお勧めしますか?

私が興味を持っているオペレーティングシステムはUbuntu(Debian)とOSXだけです。では、これを使用して#!/bin/bash両方のシステムで動作することを保証できますか?
これにより、より現代的で明確なコマンド構文を使用するスクリプトを簡単に使用できますか?使用は#!/bin/shPOSIXの使用とも関連していますか?

ベストアンサー1

まず、Bashがプリインストールされていると仮定できる場合(私が知っている限り、リストされているすべてのシステムに対応)、互換性のために次のハッシュバンを使用してください。

#!/usr/bin/env bash

これはinかoutかbashどうかにかかわらず、すべての設定で呼び出されます。/bin/usr/local/bin

ほとんどのシステム(AIX、Solaris、複数のBSDバージョンを含む)は常にbash別の場所にあります。しかし、このヒントは私が書いたものではなく、Bash Cookbookの作者が提供したものです。env/usr/bin/env

とにかく、そうです。 Bashを使用すると、「現代的な」機能を使用して人生をより簡単にすることができます。

たとえば、二重括弧は次のようになります。

[[ -f "/etc/debian_version" ]] && echo "This is a Debian flavor"

そして伝統的なシェル方言では、以下を使用する必要があります。

test -f "/etc/debian_version" && echo "This is a Debian flavor"

しかし、二重括弧の最大の利点は、正規表現を使用した一致が可能であることです。これバッシュハッカーウィキこれについて多くのアドバイスをいたします。

$((2**10))構文とともにインラインで他の算術式などの非常に便利な式を使用することもできます$((expression))

少し昔ながらですが、サブシェルにバックティックを使用するのは大丈夫です。ただし、呼び出しのネスト機能は、$(command ...)さまざまなサブシェルレベルで多くの項目をエスケープする必要がないため、より便利です。

これは、Bashが従来の一般的なPOSIX構文と比較して提供する機能のほんの一部ですsh

しかし、スクリプトだけでなくシェルでより多くの機能が必要な場合は、見てくださいzsh

おすすめ記事