쉘 함수가 결과를 "반환"하는 일반적인 방법은 이를 전역 변수에 할당하는 것입니다.
이 변수 이름에 대한 규칙/모범 사례가 있습니까?
답변1
REPLY
일반적으로 이러한 목적으로 사용됩니다. 이는 read
및 적어도 에서 select
사용됩니다 bash
.ksh
zsh
zsh
문서 에서 :
회신하다
이 매개변수는 함수 호출이나 리디렉션이 불가능하거나 필요하지 않을 때 쉘 스크립트와 쉘 내장 사이에 문자열 값을 전달하기 위해 규칙에 따라 예약되어 있습니다. 내장 명령 read 및 복합 명령 select는 REPLY를 설정할 수 있으며, 파일 이름 생성은 특정 표현식을 평가할 때 해당 값을 설정하고 확인합니다. 일부 모듈에서는 비슷한 목적으로 REPLY를 사용합니다.회신하다
REPLY와 동일하지만 문자열 대신 배열 값에 사용됩니다.
그러나 이 변수의 유형을 변경할 때 잠재적인 영향을 알고 있어야 합니다.
또 다른 방법은 변수 이름을 매개변수로 전달하는 것입니다.
get_date() {
local date
date=$(date)
eval "$1=\$date"
}
get_date
라는 변수를 사용하여 호출하면 아무런 효과가 없습니다 date
. ksh93
이 문제는 호출자 범위에서 변수를 참조하는 방법인 nameref를 도입하여 해결되었습니다. bash
Nameref 지원이 최근 추가되었지만 동일한 범위의 변수를 (이름만으로) 참조하므로 유용하지 않습니다.
function get_date {
typeset -n var=$1
var=$(date)
}
에서는 ksh93
호출해도 유효합니다 get_date var
. 하는 방법이 있습니다일하다bash
, 그리고 버그를 악용하지만 나중에 버그가 수정될 수 있으므로 거기까지는 가지 않겠습니다 .mksh
yash
unset
또 다른 접근 방식은 위치 매개변수를 $1
제외한 모든 변수를 설정하기 위해 함수에서 지역 변수를 사용하지 않는 것입니다 . $2
그러나 이로 인해 코드를 읽을 수 없게 될 수 있습니다. 예를 들어 참조하십시오.getopts_long
쉘 기능 구현.