set -u 使用法が期待どおりに機能しません。

set -u 使用法が期待どおりに機能しません。

私はsetスクリプトでさまざまなオプションを効果的に使用する方法を学んでいますが、set -uこれが変数が正しく設定されていない場合(ユーザーの削除など)、スクリプトを終了するのに最適な方法です。 ~によると男性ページをset -uクリックしてset -e以下を実行してください...

-e  Exit immediately if a command exits with a non-zero status.
-u  Treat unset variables as an error when substituting.

この機能をテストするためにテストスクリプトを作成しましたが、期待どおりに機能しないようです。たぶん誰かが私の問題を私にもっとよく説明し、私が誤解している部分を説明できますか?テストスクリプトは次のとおりです。ありがとうございます。

set -e
set -u
testing="This works"
echo $?
echo ${testing}
testing2=
echo $?
echo ${testing2}
testing3="This should not appear"
echo $?
echo ${testing3}

スクリプトを表示したいです。0そして「これ効果がある」${testing2}設定されていないため失敗します。

代わりに見せてください。0そして「これ効果がある」、遵守する0それから0 このようなことは起こってはいけません。

誰でも知識を提供できますか?ありがとうございます。

ベストアンサー1

「男乱交」から:

パラメータに値が割り当てられている場合は、パラメータが設定されます。空の文字列は有効な値です。変数が設定されている場合は、unset組み込みコマンドでのみ設定を解除できます。

これにより、testing2=変数は空の文字列に設定されます。

に変更しunset testing2てもう一度やり直してください。


この場合、set -e割り当てには終了コード1がないため役に立ちません。最後に実行されたコマンド (割り当て) の終了コードが 0 であることを確認するには、次のようにします。この質問を読んでください:

$ false; a=""; echo $?
0

そして私はset -eを使うのが解決策ではなく問題が多いと思います。

設定されていない変数を使用するとエラーが発生する可能性がありますset -u

#!/bin/bash
set -u
testing="This works"
echo ${testing}
unset testing2
echo ${testing2}
testing3="This should not appear"
echo ${testing3}

以下を出力します。

$  ./script.sh
This works
./script.sh: line 9: testing2: unbound variable

おすすめ記事