私は、次のような行を使用して、変数が null 以外の値を持っている (またはメッセージを表示して保釈する) ことをテストすることに慣れています。
test $variable || (echo "Value of \$variable cannot be null."; exit 1)
スクリプトで関数を使用するのは初めてですが、null 以外の値が渡されていることを確認する必要があるか、関数から抜け出す必要がある場合があります。ただし、「または」の場合のコマンドのグループ化は、関数内で同じように機能していません。実証するために、この小さなテスト スクリプトを作成しました。
$ cat -n bubu.sh
1 #!/bin/bash
2
3 read -p "give a value for variable \$foo: " -e -i "bar" foo
4
5 function firstfunc {
6 test $1 || (echo "no value"; return 1)
7 echo it looks like \"$1\" is the first value of \$foo
8 return 0
9 }
10
11 function secondfunc {
12 test $1 || return 1
13 echo it looks like \"$1\" is the second value of \$foo
14 return 0
15 }
16 echo "first function:"
17 firstfunc $foo
18 echo returned $?
19
20 echo "second function:"
21 secondfunc $foo
22 echo returned $?
変数に値がある場合の出力は次のようになります。
$ ./bubu.sh
give a value for variable $foo: bar
first function:
it looks like "bar" is the first value of $foo
returned 0
second function:
it looks like "bar" is the second value of $foo
returned 0
そして、値がない場合の出力
$ ./bubu.sh
give a value for variable $foo:
first function:
no value
it looks like "" is the first value of $foo
returned 0
second function:
returned 1
値がない最初の関数では、「or」コマンド グループの最初のコマンドを取得し、「値なし」がエコーされますが、return コマンドが渡され、return までの残りの関数が実行されます。 .
関数内でコマンドのグループ化の括弧が異なる動作をするのはなぜですか、または他に何が欠けていますか?