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 이상을 사용하면 다음과 같은 방법을 사용할 수 있습니다.nameref
Namerefs를 사용하면 함수가 하나 이상의 변수 출력 매개 변수의 이름을 사용할 수 있습니다.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
'programing' 카테고리의 다른 글
선택/선택 해제된 키워드 지원 없이 VB에서 GetHashCode를 재정의하시겠습니까? (0) | 2023.05.20 |
---|---|
Eclipse에서 XML 유효성 검사 사용 안 함 (0) | 2023.05.20 |
Vue.js에 대한 CORS 문제 (0) | 2023.05.20 |
std:: 벡터가 일반 배열보다 훨씬 느립니까? (0) | 2023.05.20 |
DBeaver는 기본 Postgre만 볼 수 있습니다.SQL 데이터베이스가 연결되어 있는 경우 (0) | 2023.05.20 |