"nlu_setting"으로 시작하는 모든 환경 변수의 이름과 값을 에코합니다.

"nlu_setting"으로 시작하는 모든 환경 변수의 이름과 값을 에코합니다.

nlu_setting으로 시작하는 모든 환경 변수의 이름과 값을 에코하는 방법을 찾고 있으므로 출력은 다음과 같습니다.

nlu_setting_json=true
nlu_setting_global=0
nlu_setting_bar=foo

이 작업을 수행하는 방법을 아는 사람이 있나요?

답변1

for var in "${!nlu_setting_@}"; do
    printf '%s=%s\n' "$var" "${!var}"
done

이 확장은 특정 접두사와 일치하는 변수 이름 목록을 반환하는 특정 확장 ${!nlu_setting_@}입니다 . bash여기서는 string으로 시작하는 모든 이름을 쿼리하는 데 이를 사용합니다 nlu_setting_. 이름을 반복하고 변수 값과 함께 이름을 출력합니다.

변수의 값을 얻기 위해 변수 간접지정( )을 사용합니다 ${!var}.

답변2

이 질문에 대한 답변을 읽은 후 나는 다음과 같은 결론에 도달했습니다.

   compgen -A variable nlu_setting_ | while read v; do
            echo "$v = ${!v}";
   done

작동하는 것 같습니다. compgen 명령을 들어본 적이 없지만 내장된 범용 bash라면 모든 것이 괜찮을 것입니다.

답변3

두 가지 이전 답변 모두 좋지만 나만의 답변이 있습니다.

env | grep ^nlu_setting_ | while read kv; do echo "$kv"; done

키와 값을 구별하지 않고 grep을 사용하지만 그것이 바로 내가 원하는 것입니다. 단지 환경 ​​변수일 뿐이며 올바른 접두사로 시작합니다. 어쩌면 누군가가 이 변형을 유용하다고 생각할 수도 있습니다.

답변4

에서 동일한 작업을 수행하려는 사용자를 위해 패턴과 일치하는 변수를 나열하는 옵션이 zsh있습니다 .-mtypeset

$ typeset -m 'nlu_setting_*'
nlu_setting_1=scalar
nlu_setting_2=( some array )
nlu_setting_3=( [associative]=array [now]=some )

유형 정보를 포함하려면 다음을 수행하십시오.

$ typeset -pm 'nlu_setting_*'
typeset nlu_setting_1=scalar
typeset -a nlu_setting_2=( some array )
typeset -A nlu_setting_3=( [associative]=array [now]=some )

이름이 패턴과 일치하는 매개변수를 나열합니다.

$ print -rC1 ${(kM)parameters:#nlu_setting_*}
nlu_setting_1
nlu_setting_2
nlu_setting_3

이것가치특수 연관 배열의 유형 $parameters은 변수의 유형입니다. 예를 들어, 스칼라만 나열하려면 다음을 수행하십시오.

$ print -rC1 ${(kM)parameters[(R)scalar]:#nlu_setting_*}
nlu_setting_1

( R역 첨자를 사용하세요).

다음을 사용하는 대신 해당 이름과 값을 인쇄하려면 다음을 사용하세요 typeset -m.

$ for v (${(kM)parameters[(R)scalar]:#nlu_setting_*}) printf '%s=%q\n' $v ${(P)v}
nlu_setting_1=scalar

관련 정보