Bash의 중첩 변수 대체

Natersoz

나는 / etc / bashrc의 pathmunge () 함수를 통해 캠을 보았다. 이것은 PATH에서 중복 항목을 유지한다는 점에서 훌륭하고 유용합니다.

그러나 이것은 다른 변수에 대한 패턴이어야합니다. CDPATH, LD_LIBRARY_PATH에는 중복 항목이 없어야합니다. 그래서 같은 방식으로 varmunge 함수를 작성하려고했습니다. 여기있어:

# varmunge() allows a one and only one addition of entries into the
# a PATH like environment variable. Good use cases for this function
# are: PATH, CDPATH, LD_LIBRARY_PATH
# example: varmunge PATH $HOME/bin [after | before]
#!/bin/sh
varmunge () {
    case ":$1:" in
        *:"$2":*)
            ;;
        *)
            if [ "$3" = "after" ] ; then
                export $1=\$$1:$2         # These both fail
#                ${1}=${$1}:$2
            else
                export $1=$2:\$$1         # blech.
#                ${1}=$2:${$1}
            fi
    esac
}

그러나 아아, 작동하지 않습니다. 아무도 내 한심한 bash-ness를 고칠 수 있습니까?

감사 ...

다른 사람이 원하는 경우 올바른 bash 스크립트를 게시합니다.

#!/bin/sh
varmunge () {
    case ":${!1}:" in
        *:"$2":*)
            ;;
        *)
            if [ "$3" = "after" ] ; then
                eval ${1}=${!1}:$2
            else
                eval ${1}=$2:${!1}
            fi
    esac
}

varprint() {
    echo "${1}=${!1}"
}

# test varprint
VARTEST="path1:path2"
varprint VARTEST

# test varmunge
varmunge VARTEST path1
varmunge VARTEST path1 after
varmunge VARTEST path2
varmunge VARTEST path2 after
varmunge VARTEST path3
varmunge VARTEST path3 after
varmunge VARTEST path3
varmunge VARTEST path4 after
varmunge VARTEST path4

varprint VARTEST
에탄 라이스 너

정확히 작동하지 않는 것이 무엇인지 설명하지는 않았지만 파악 (또는 경험적으로 테스트)하기에 충분히 쉽습니다.

어쨌든 여기에 동일한 문제가 두 번 있습니다 (일단 해결하려고했지만 작동하도록 만드는 구성을 사용하지 못했음).

문제는 값이 아닌 처리하려는 변수 $1이름 으로 확장 된다는 것 입니다.

따라서 전화를 걸고 회선이 확장 varmunge PATH /some/path되면 원하는 곳으로 이동합니다 .":$1:":PATH::<value of $PATH>:

그렇게하려면 (bashism) 간접 확장 을 사용해야 합니다.

그래서 당신은 ":${!1}:"거기 를 원합니다 .

마찬가지로 케이스 본문에서 eval간접 할당 패턴 을 사용하려고했지만 export그렇게 작동하지 않으므로 이스케이프 된 변수 이름을 다시 확장하지 않습니다.

운 좋게도 exportexport가 할당 자체 를 수행하기 때문에 사용하려는 경우 여기에서 해당 트릭이 필요하지 않습니다 ( declare및과 유사 printf -v).

그래서 당신은 사용할 수 있습니다 export "$1=${!1}:$2"export "$1=$2:${!1}"적절한.

printf -v "$1" -- %s "${!1}:$2"변수를 지속적으로 다시 내보내고 싶지 않은 경우 (bashism again) 등을 사용할 수도 있습니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Java 로그 백 중첩 변수 대체

분류에서Dev

중첩 된 구조체의 멤버 변수에 대한 포인터

분류에서Dev

중첩 된 구조체의 멤버 변수에 대한 포인터

분류에서Dev

ZSH의 중첩 대체

분류에서Dev

Bash에서 이중 변수 대체

분류에서Dev

bash 명령 대체 중 빈 변수

분류에서Dev

bash에서 변수 내에서 변수를 대체하거나 중첩하는 방법이 있습니까?

분류에서Dev

Bash : 에코 중첩 변수

분류에서Dev

Bash에서 대문자 및 대체를위한 매개 변수 확장을 어떻게 중첩합니까?

분류에서Dev

BASH 변수 대체 (?)

분류에서Dev

중첩 된 개체 및 멤버 변수의 생성 순서

분류에서Dev

bash의 변수에 할당되는 명령 대체 내부의 중괄호

분류에서Dev

객체의 중첩 된 속성 변경

분류에서Dev

JSON 객체 변환의 중첩 배열

분류에서Dev

JSONArray 매개 변수의 중첩 된 객체에 대한 수정 사항이 고정되지 않음

분류에서Dev

깊게 중첩 된 개체의 정의되지 않은 변수에 대한 기본값

분류에서Dev

중첩 된 개체의 값 수정

분류에서Dev

키에 대한 변수를 사용하여 중첩 된 개체의 요소에 액세스합니까?

분류에서Dev

명령 대체가 변수 대체에 중첩 될 수 있습니까?

분류에서Dev

VC ++ 2013의 중첩 된 가변 템플릿 구조체에 대한 별칭

분류에서Dev

JSON 문자열의 Bash 변수 대체

분류에서Dev

JSON 문자열의 Bash 변수 대체

분류에서Dev

변수 중첩 목록의 대용량 파일을 JSON으로 변환

분류에서Dev

Bash 스크립팅-중첩 변수

분류에서Dev

Python 중첩 함수의 변수 범위

분류에서Dev

Bash : 중첩 함수의 오류 처리

분류에서Dev

awk에서 중첩 된 for 루프의 bash 변수

분류에서Dev

http.get의 매개 변수로 중첩 된 객체 보내기

분류에서Dev

중첩 된 불변 개체의 배열에 액세스 할 수 없습니다.

Related 관련 기사

  1. 1

    Java 로그 백 중첩 변수 대체

  2. 2

    중첩 된 구조체의 멤버 변수에 대한 포인터

  3. 3

    중첩 된 구조체의 멤버 변수에 대한 포인터

  4. 4

    ZSH의 중첩 대체

  5. 5

    Bash에서 이중 변수 대체

  6. 6

    bash 명령 대체 중 빈 변수

  7. 7

    bash에서 변수 내에서 변수를 대체하거나 중첩하는 방법이 있습니까?

  8. 8

    Bash : 에코 중첩 변수

  9. 9

    Bash에서 대문자 및 대체를위한 매개 변수 확장을 어떻게 중첩합니까?

  10. 10

    BASH 변수 대체 (?)

  11. 11

    중첩 된 개체 및 멤버 변수의 생성 순서

  12. 12

    bash의 변수에 할당되는 명령 대체 내부의 중괄호

  13. 13

    객체의 중첩 된 속성 변경

  14. 14

    JSON 객체 변환의 중첩 배열

  15. 15

    JSONArray 매개 변수의 중첩 된 객체에 대한 수정 사항이 고정되지 않음

  16. 16

    깊게 중첩 된 개체의 정의되지 않은 변수에 대한 기본값

  17. 17

    중첩 된 개체의 값 수정

  18. 18

    키에 대한 변수를 사용하여 중첩 된 개체의 요소에 액세스합니까?

  19. 19

    명령 대체가 변수 대체에 중첩 될 수 있습니까?

  20. 20

    VC ++ 2013의 중첩 된 가변 템플릿 구조체에 대한 별칭

  21. 21

    JSON 문자열의 Bash 변수 대체

  22. 22

    JSON 문자열의 Bash 변수 대체

  23. 23

    변수 중첩 목록의 대용량 파일을 JSON으로 변환

  24. 24

    Bash 스크립팅-중첩 변수

  25. 25

    Python 중첩 함수의 변수 범위

  26. 26

    Bash : 중첩 함수의 오류 처리

  27. 27

    awk에서 중첩 된 for 루프의 bash 변수

  28. 28

    http.get의 매개 변수로 중첩 된 객체 보내기

  29. 29

    중첩 된 불변 개체의 배열에 액세스 할 수 없습니다.

뜨겁다태그

보관