シェル関数から数字と文字列を返す最良の方法は何ですか?

シェル関数から数字と文字列を返す最良の方法は何ですか?

私はシェル関数から数字を返すために「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

関連情報