空のシェル変数を使用するとエラーが発生しました。

空のシェル変数を使用するとエラーが発生しました。

$PROJECT_HOME/*時にはプロジェクト内のすべてのファイルを使用して削除します。PROJECT_HOME環境変数が設定されていない場合(私が設定し、su新しいユーザーがこの環境変数を設定していないため)、ルートフォルダからすべてのファイルが削除され始めます。これが世界の終わりです。

bashシェルで定義されていない環境変数を使用するときに発生するエラーをどのように設定しますか?

答え1

POSIXシェルでは、次のものを使用できます。Uを設定:

#!/bin/sh

set -u
: "${UNSET_VAR}"

または使用パラメータ拡張:

: "${UNSET_VAR?Unset variable}"

あなたの場合は、設定されているが空の変数に対しても失敗を:?代わりに使用する必要があります。?

rm -rf -- "${PROJECT_HOME:?PROJECT_HOME empty or unset}"/*

答え2

[ -z "$PROJECT_HOME" ] || rm -r "$PROJECT_HOME"/*

これは次のような場合も捉えます。PROJECT_HOME はい設定はできましたが内容はありません。

例:

1)これにより、システムから削除できるほとんどすべての項目が削除されます(内部のドットファイルは除外されます(/通常は存在しません))。

set -u
PROJECT_HOME=
rm -r "$PROJECT_HOME"/*

2) これは何もしません:

PROJECT_HOME=
[ -z "$PROJECT_HOME" ] || rm -r "$PROJECT_HOME"/* 

プロジェクトのホームディレクトリを完全に削除して再作成することも別のオプションです(ドットファイルも削除したい場合)。

#no apocalyptic threats in this scenario
rm -r "$PROJECT_HOME"
mkdir "$_" 

答え3

これを行う別の方法:

rm -r "${somevar:-/tmp/or_this_if_somevar_is_empty}"/*

変数置換がたくさんあります。上記の置換は、「somevar」が空の場合です(この場合は削除を試みます/tmp/or_this_if_somevar_is_empty/*)。

関連情報