쉘 함수에서 숫자와 문자열을 반환하는 가장 좋은 방법은 무엇입니까?

쉘 함수에서 숫자와 문자열을 반환하는 가장 좋은 방법은 무엇입니까?

나는 쉘 함수에서 숫자를 반환하기 위해 "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

관련 정보