私はシェル関数から数字を返すために「return」を使用し、関数から文字列を返すために「echo」が使用されることを知っています。
1. シェル関数は数値を返します。
function test1()
{
#some handling
return 0
}
2. シェル関数は文字列を返します。
function test2()
{
# some handling
echo "$data"
}
シェル関数が数値と文字列を返す必要がある状況があります。
3. シェル関数から数値と文字列を返します。
dummy algorithm
function validate()
{
var=$2
if var==something
return 1
else
# get modified varible
modifiedvar=call(var)
return 0 modifiedvar
}
validate "string"
最良のアプローチは何ですか?
答え1
コマンド置換を使用して文字列をキャプチャし、戻り状態とともに「数値」をキャプチャできます。
f() {
echo "Don't panic"
return 42
}
result=$(f)
status=$?
echo "The function returned >$result< and $status"
The function returned >Don't panic< and 42
戻り状態は0から255までの数字であることを覚えておいてください。
$ f() { echo "$1"; return $2; }
$ result=$(f "big number" 300); status=$?
# ........................^^^
$ echo "The function returned '$result' and $status"
The function returned 'big number' and 44
# .....................................^^
$ result=$(f "small number" -300); status=$?
# ..........................^^^^
$ echo "The function returned '$result' and $status"
The function returned 'small number' and 212
# .......................................^^^
答え2
このようなものをお探しですか?
スクリプト:
#!/bin/bash
var="$1"
function f() {
if [[ -z "$var" || "$var" = "error" ]]; then
return 1
else
var="bar"
return 0
fi
}
if f; then
echo "function returned $?"
echo "$var OK"
else
echo "function returned $?"
echo "error"
fi
$ ./script
function returned 1
error
$ ./script "error"
function returned 1
error
$ ./script "foo"
function returned 0
bar OK