programing

bash를 사용하여 함수의 출력을 변수에 할당하려면 어떻게 해야 합니까?

javamemo 2023. 5. 20. 00:24
반응형

bash를 사용하여 함수의 출력을 변수에 할당하려면 어떻게 해야 합니까?

일부 출력을 생성하는 bash 함수가 있습니다.

function scan {
  echo "output"
}

이 출력을 변수에 할당하려면 어떻게 해야 합니까?

즉, VAR=scan(물론 이것은 작동하지 않습니다. VAR을 "scan"이라는 문자열과 동일하게 만듭니다.)

VAR=$(scan)

프로그램의 경우와 정확히 같은 방식입니다.

일반 프로그램을 사용하는 것처럼 명령/파이프라인에서 bash 함수를 사용할 수 있습니다.하위 셸 및 과도적 명령 대체 기능도 사용할 수 있습니다.

VAR=$(scan)

대부분의 경우 원하는 결과를 얻을 수 있는 간단한 방법입니다.아래에 특수한 경우의 개요를 설명하겠습니다.

후행 줄 바꿈 유지:

명령 대체의 (일반적으로 유용한) 부작용 중 하나는 임의의 수의 후행 새 줄을 제거한다는 것입니다.후행 새 선을 보존하려는 경우 하위 셸의 출력에 더미 문자를 추가한 다음 매개 변수 확장을 사용하여 해당 문자를 제거할 수 있습니다.

function scan2 () {
    local nl=$'\x0a';  # that's just \n
    echo "output${nl}${nl}" # 2 in the string + 1 by echo
}

# append a character to the total output.
# and strip it with %% parameter expansion.
VAR=$(scan2; echo "x"); VAR="${VAR%%x}"

echo "${VAR}---"

인쇄(새 줄 3개 유지):

output


---

출력 매개변수 사용: 하위 셸 회피(새 줄 유지)

함수가 문자열을 변수로 "반환"하려고 하는 경우, bash v4.3 이상을 사용하면 다음과 같은 방법을 사용할 수 있습니다.namerefNamerefs를 사용하면 함수가 하나 이상의 변수 출력 매개 변수의 이름을 사용할 수 있습니다.nameref 변수에 항목을 할당할 수 있으며, 변수를 변경한 것과 같습니다. 'points to/references'.

function scan3() {
    local -n outvar=$1    # -n makes it a nameref.
    local nl=$'\x0a'
    outvar="output${nl}${nl}"  # two total. quotes preserve newlines
}

VAR="some prior value which will get overwritten"

# you pass the name of the variable. VAR will be modified.
scan3 VAR

# newlines are also preserved.
echo "${VAR}==="

인쇄:

output

===

이 양식에는 몇 가지 이점이 있습니다.즉, 전역 변수를 어디에서나 사용하지 않고 호출자의 환경을 수정할 수 있습니다.

참고: namerefs를 사용하면 bash 내장 기능에 크게 의존하는 경우 프로그램의 성능을 크게 향상시킬 수 있습니다. 바로 뒤에 버려지는 하위 셸이 생성되지 않기 때문입니다.이것은 일반적으로 자주 재사용되는 작은 기능, 예를 들어 다음으로 끝나는 기능에 더 적합합니다.echo "$returnstring"

이것은 관련이 있습니다.https://stackoverflow.com/a/38997681/5556676

init_js는 로컬이 아닌 선언을 사용해야 한다고 생각합니다!

function scan3() {
    declare -n outvar=$1    # -n makes it a nameref.
    local nl=$'\x0a'
    outvar="output${nl}${nl}"  # two total. quotes preserve newlines
}

언급URL : https://stackoverflow.com/questions/1809899/how-can-i-assign-the-output-of-a-function-to-a-variable-using-bash

반응형