bash変数を調べ、nullの場合はそれを判断する正しい構文を探します。そうでない場合は続行します。Bash If文のヌル
変数が空の場合、おそらくif [ $lastUpdated = null?; then... else...
bash変数を調べ、nullの場合はそれを判断する正しい構文を探します。そうでない場合は続行します。Bash If文のヌル
変数が空の場合、おそらくif [ $lastUpdated = null?; then... else...
ただ、テストのようなものは:
if [ -z "$lastUpdated" ]; then
# not set
fi
ヌル値の変数(空の文字列が割り当てられている)と未設定の変数の間に違いがあります。この答えはその区別を検出しません。 – chepner
@chepnerありますか?それを拡張してください。 – trojanfoe
割り当ての前に、変数は設定されていません。 'FOO ='(値なし)は 'FOO =" "'と同じです。これは 'FOO'の値を空の文字列に設定します。さまざまなパラメータ拡張( '$ {FOO:-default}'と '$ {FOO-default}')は、この区別を可能にします。あなたが使っているような未定義変数の引用された展開は、空の文字列に展開されるので、 '-z'は2つの状態を区別できません。 – chepner
はchepnerのコメント@に拡大し、ここであなたはおそらく空に設定するのではなくて(未設定のテストができる方法です値)変数は:
if [ -z "${lastUpdated+set}" ]; then
${variable+word}
構文は$variable
が設定されていない場合は、空の文字列を与え、
$ fullvar=somestring
$ emptyvar=
$ echo "<${fullvar+set}>"
<set>
$ echo "<${emptyvar+set}>"
<set>
$ echo "<${unsetvar+set}>"
<>
式に引用符を入れずに '[-z $ {lastUpdated + set}];'にしても問題ありません。[このSOの回答](https://stackoverflow.com/questions/3601515/how-to-check-if-a-variable-is-set-in-bash)で詳しい説明があります。 – panepeter
@panepeter真実ですが、私が経験したことは、変数参照を二重引用符で囲むだけで、安全な状態にするのがより簡単で安全であることがわかります。この場合、詳細な説明( '[-z]'とは何かを理解することを含む)と二重引用符を使う方がずっと簡単です。別の言い方をすると、もし誰かが '[-z $ {lastUpdated + set}]'がセット変数をテストする良い方法だと考えるなら、 '[-n $ {lastUpdated + set}] 'は未設定の変数をテストする良い方法ですが、完全に失敗します。 –
をそれをすべてまとめると::bashのでは本当のヌル値はありません、設定されていた場合、文字列「言葉」。 Chepnerのコメントは次の点にあります。
bashのドキュメントでは、空文字列の同義語としてnullが使用されています。あなたが本当にやりたいことは未設定または空ののチェック(すなわち「」、すなわちある場合
if [ "${lastUpdated}" = "" ]; then # $lastUpdated is an empty string fi
:
したがって、ヌルをチェックすると、空の文字列のチェックを意味します'ヌル')変数、trojanfoeのアプローチを使用します。
if [ -z "$lastUpdated" ]; then
# $lastUpdated could be "" or not set at all
fi
あなたがしたい場合は
if [ -z ${lastUpdated+set} ]; then
# $lastUpdated is not set
fi
(Parameter Expansionはここで何が起こっているのかである)
'-eq'は整数を比較するためのものです。文字列を比較するには '='が必要です。 –
ない「ヌル」値はbashではありません:天候変数が設定されていないが、空の文字列とうまくある、ゴードンDavissonの答えが進むべき道であると確認してください。文字列は空でも構いません。あなたは '$ lastUpdated'の値をどのように設定しますか? –
「ヌル」とはどういう意味ですか? – zoska
いくつかの文脈では、 '$ {lastUpdated:= never}'や '$ {lastUpdated:-never}'などの表記が適切かもしれません。 [パラメータの拡張](http://www.gnu.org/software/bash/manual/bash.html#Shell-パラメータ - 展開)を参照してください。 –