0 または 1 (たとえば true または false) を返し、引数を使用する関数を作成し、別の関数に変数を作成してその関数の結果を保存しようとします。最後に、変数が0または1(trueまたはfalse)であることを確認します。
以下は私が試しているものの例です。
#!/bin/bash
_has_string() {
if [ $1 == "string" ];
return 0
else
return 1
fi
}
_my_func() {
var=$(_has_string "string")
if [ $var == "0" ]; then
echo "var contains string"
else
echo "var does not contain string"
fi
}
_my_func
私はいくつかのバリエーションを試しましたが、うまくいく方法を見つけることができないようです。私のすべてのバリアントは基本的に何も返しません$var
。 0ではありません。空ではありません。文字通り、空です。
答え1
出力を終了コードと混同しています。
_my_func() {
if _has_string 'string'; then
また、変数を引用する必要があります。これは_has_string
次のように単純化できます。
_has_string() {
[ "$1" = 'string' ]
}
答え2
$(...)
返品出力コマンド内容:標準出力に送信される内容です。欲しい終了コード。 bashスクリプトのプロセス(またはあなたの場合は関数)が終了した後、特殊変数は$?
終了コードに設定されます。
だから代わりに
var=$(_has_string 'string')
...
考える
_has_string 'string'
var=$?
...
答え3
他の人がすでに指摘しているように、単にif
文の中の関数を使用してください。以下はあなたが知らないかもしれないいくつかのことです。
関数は形で考えることができる複合コマンド。 Bashのマニュアルによると、[[
これは複合コマンドの作成に使用できる演算子の1つです。したがって、関数は_has_string()
次のように実装できます。
$ _has_string()[[ "$1" = "string" ]]
$ if _has_string "string"; then echo "YES"; fi
YES
もちろん、これは通信事業者の事情のため決して持ち運ぶことはできません[[
。しかし、我々は( )
またはを使用することができます{}
。たとえば、動作方法は次のとおりです/bin/dash
。
$ _has_string()( [ "$1" = "string" ]; )
$ if _has_string "string"; then echo "YES"; fi
YES
$ if _has_string "nope" ; then echo "YES"; fi
$