web-dev-qa-db-ja.com

バッシュ:「戻り値のマスキング」とはどういう意味ですか?

shellcheckは次の警告を生成しました

SC2155: Declare and assign separately to avoid masking return
values

このコード行について

local key_value=$(echo "$current_line" | mawk '/.+=.+/ {print $1 }')

「戻り値のマスキング」とはどういう意味ですか、それは前述の警告にどのように関係しますか?

変数をlocalまたはexportedとして宣言すると、それ自体が成功を返すかどうかを返すコマンドになります。

$ var=$(false)
$ echo $?
1
$ export var=$(false)
$ echo $?
0

したがって、コマンドの戻り値(echo "$current_line" | mawk '/.+=.+/ {print $1 }')、ローカル宣言が成功する限り(ほとんどの場合そうです)、0で終了するため、これを行うことはできません。

これを回避するには、個別に宣言してから割り当てることをお勧めします。

local key_value
key_value=$(echo "$current_line" | mawk '/.+=.+/ {print $1 }')

これは私が頻繁に無視するシェルチェックルールであり、その変数宣言の戻り値に基づいて行動しようとしているのでない限り、IMOは無視しても安全です。

これを無視するには、スクリプトの先頭に次の行を追加します(もちろんハッシュバングの下にあります)。

# shellcheck disable=SC2155
7
jesse_b