shにはエラーが表示されますが、bashにはエラーが表示されないのはなぜですか?

shにはエラーが表示されますが、bashにはエラーが表示されないのはなぜですか?

次のスクリプトが「予期しない演算子」メッセージを表示しshますbash

#!/bin/sh
if [ $UID -ne 0 ]
then
        echo "You must be root."
        exit 1
else
        echo "Open sesame."
        exit 0
fi

ベストアンサー1

すべてのシェルが変数を定義するわけではありませんUID。これはbashとzshの機能だけです。他のシェルではUIDこの変数は定義されていないため、テストコマンドは[ -ne 0 ]構文エラーに拡張されます。

ユーザーIDを取得する便利な方法は、次を使用することです。id便利です。

if [ "$(id -u)" -ne 0 ]; then …

おすすめ記事