Makefile에서 bash 연관 배열 반복

브라이언
$ bash -version
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)

다음 쉘 스크립트를 고려하십시오.

#!/bin/bash

declare -A PROVS=( ["NL"]=10 ["PE"]=11 ["NS"]=12 ["NB"]=13 ["QC"]=24 ["ON"]=35 ["MB"]=46 ["SK"]=47 ["AB"]=48 ["BC"]=59 ["YK"]=60 ["NT"]=61 ["NU"]=62 )

for key in "${!PROVS[@]}" ; do \
  touch "foo_${key}_${PROVS[${key}]}" ; \
done

Makefile에서 동등한 작업을 시도하고 있습니다.

SHELL := /bin/bash
.PHONY: foo
foo:
  declare -A PROVS=( ["NL"]=10 ["PE"]=11 ["NS"]=12 ["NB"]=13 ["QC"]=24 ["ON"]=35 ["MB"]=46 ["SK"]=47 ["AB"]=48 ["BC"]=59 ["YK"]=60 ["NT"]=61 ["NU"]=62 )

  for key in "$${!PROVS[@]}" ; do \
    touch "foo_$${key}_$${PROVS[$${key}]}" ; \
  done

나는 정말로touch 파일을 원하지 않는다 . 나는 할 수 없기 때문에 이것을하고 있습니다 @echo-@는 루프에 있기 때문에 줄의 시작 부분에있는 것으로 보이지 않을 것입니다. 아니면 그것이 일어나고있는 것처럼 보입니다.

어쨌든 요점은 루프가 전혀 실행되지 않는 것처럼 보이기 때문에 touch/ echo비즈니스입니다. 위의 쉘 스크립트의 내용은 make터미널에 정확히 반영 되는 내용입니다 . 나는 shebang을 추가하고 온 전성 검사로 실행했습니다. 매력처럼 작동합니다.

일반 배열을 사용하면 잘 작동합니다.

for prov in NL PE NS NB QC ON MB SK AB BC YK NT NU ; do \

그러나 해당 코드 (10, 11 등)도 필요합니다.

누구든지 이것에 대한 통찰력이 있습니까?

필요하지는 않지만 "declare -A"를 사용하면서 파일 맨 위에 PROVS 변수를 할당하는 방법 (또는 가능한 경우)도 알고 싶습니다.

편집 : 나는 Makefile 예제를 엉망으로 만들어서 인라인 쉘 명령이었고 더 이상 레시피가 아닙니다. 명확히하기 위해 "foo :"대상을 다시 추가했습니다.

트리플 리

코드 발췌가 적절하게 대표적이라면 Makefile에 직접 Bash 명령을 입력하고 Make가 Bash로 실행할 것으로 예상하는 것 같습니다. 그것이 작동하는 방식이 아닙니다. Makefile의 구문은 완전히 다릅니다. 레시피 에서 Bash 명령을 입력 할 수 있습니다. 레시피의 각 개별 라인은 별도의 하위 쉘에서 실행됩니다. 따라서 최소한 두 가지 변경이 필요합니다.

  • 셸 명령은 대상에 있어야합니다.
  • declare루프와 같은 쉘에서 실행해야합니다; 그렇지 않으면 declare하나의 Bash 인스턴스에서 종료 한 다음 지금 잃어버린 것에 대해 아무것도 모르는 별도의 인스턴스에서 루프를 실행하십시오 declare.

다음은 이러한 변경 사항을 적용한 Makefile의 간단한 리팩토링입니다.

SHELL=/bin/bash   # This is the standard compliant method

.PHONY: all
all:
    declare -A PROVS=( ["NL"]=10 ["PE"]=11 ["NS"]=12 ["NB"]=13 \
        ["QC"]=24 ["ON"]=35 ["MB"]=46 ["SK"]=47 ["AB"]=48 \
        ["BC"]=59 ["YK"]=60 ["NT"]=61 ["NU"]=62 )\
    ; for key in "$${!PROVS[@]}" ; do \
        touch "foo_$${key}_$${PROVS[$${key}]}" ; \
    done

데모 : http://ideone.com/t94AOB

@자동으로 명령을 실행하는 규칙은 전체 명령 행에 적용됩니다. 따라서 declare위의 앞에 넣을 수 있으며,이 경우 전체 명령 줄이 Bash에 제출되기 전에 제거됩니다. 다른 곳에서는 제거되거나 이해되지 않으며 호출 된 셸에서 Bash 구문 오류가 발생합니다.

( @규칙에 대한 집착 은 어쨌든 안티 패턴입니다. make -s출력을보고 싶지 않으면 실행하십시오 . 종료 make하면 규칙을 디버그하기가 더 어려워집니다.)

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

연관 배열 BASH에서 중복 키 병합

분류에서Dev

문자열에서 Bash 연관 배열?

분류에서Dev

PHP에서 연관 배열을 반복 할 때 오류 발생

분류에서Dev

bash에서 배열을 통해 반복

분류에서Dev

함수에서 연관 배열 반환

분류에서Dev

PHP 연관 배열에 대해 역방향 반복

분류에서Dev

Bash는 함수에서 연관 배열을 반환 한 다음 해당 연관 배열을 다른 함수에 전달합니다.

분류에서Dev

Bash는 함수에서 연관 배열을 반환 한 다음 해당 연관 배열을 다른 함수에 전달합니다.

분류에서Dev

연관 배열에서 문자열 이스케이프 (bash)

분류에서Dev

zsh 연관 배열에서 키 (또는 k / v 쌍)를 반복합니까?

분류에서Dev

BASH 연관 배열 인쇄

분류에서Dev

BASH 연관 배열 인쇄

분류에서Dev

연관 배열로 반복 횟수

분류에서Dev

중첩 된 연관 배열 반복

분류에서Dev

Bash에서 연관 배열에 액세스하는 방법

분류에서Dev

연관 배열 이름 대체 및 bash 복사

분류에서Dev

Bash 연관 배열 키에서 파일 목록 압축 해제

분류에서Dev

Bash에서 동적으로 연관 배열 생성

분류에서Dev

bash 변수 및 연관 배열에서 json 생성

분류에서Dev

PHP : 연관 배열의 배열에서 특정 키와 관련된 반환 값

분류에서Dev

BASH 연관 배열 재 배열 키

분류에서Dev

bash 연관 배열의 glob 표현식과 일치하는 키 이름에 속하는 반환 값

분류에서Dev

반복되는 요소 수를 기반으로 PHP에서 다차원 연관 배열 정렬 / 제한

분류에서Dev

bash에서 배열을 반복하는 방법

분류에서Dev

Bash : 연관 배열의 키로서의 공간

분류에서Dev

Bash 연관 배열을 jq 필터에 인수로 전달

분류에서Dev

PHP에서 복잡한 연관 배열 정렬

분류에서Dev

연관 배열 (PHP)에서 중복 이름 (키)의 값 병합

분류에서Dev

연관 배열 반전

Related 관련 기사

  1. 1

    연관 배열 BASH에서 중복 키 병합

  2. 2

    문자열에서 Bash 연관 배열?

  3. 3

    PHP에서 연관 배열을 반복 할 때 오류 발생

  4. 4

    bash에서 배열을 통해 반복

  5. 5

    함수에서 연관 배열 반환

  6. 6

    PHP 연관 배열에 대해 역방향 반복

  7. 7

    Bash는 함수에서 연관 배열을 반환 한 다음 해당 연관 배열을 다른 함수에 전달합니다.

  8. 8

    Bash는 함수에서 연관 배열을 반환 한 다음 해당 연관 배열을 다른 함수에 전달합니다.

  9. 9

    연관 배열에서 문자열 이스케이프 (bash)

  10. 10

    zsh 연관 배열에서 키 (또는 k / v 쌍)를 반복합니까?

  11. 11

    BASH 연관 배열 인쇄

  12. 12

    BASH 연관 배열 인쇄

  13. 13

    연관 배열로 반복 횟수

  14. 14

    중첩 된 연관 배열 반복

  15. 15

    Bash에서 연관 배열에 액세스하는 방법

  16. 16

    연관 배열 이름 대체 및 bash 복사

  17. 17

    Bash 연관 배열 키에서 파일 목록 압축 해제

  18. 18

    Bash에서 동적으로 연관 배열 생성

  19. 19

    bash 변수 및 연관 배열에서 json 생성

  20. 20

    PHP : 연관 배열의 배열에서 특정 키와 관련된 반환 값

  21. 21

    BASH 연관 배열 재 배열 키

  22. 22

    bash 연관 배열의 glob 표현식과 일치하는 키 이름에 속하는 반환 값

  23. 23

    반복되는 요소 수를 기반으로 PHP에서 다차원 연관 배열 정렬 / 제한

  24. 24

    bash에서 배열을 반복하는 방법

  25. 25

    Bash : 연관 배열의 키로서의 공간

  26. 26

    Bash 연관 배열을 jq 필터에 인수로 전달

  27. 27

    PHP에서 복잡한 연관 배열 정렬

  28. 28

    연관 배열 (PHP)에서 중복 이름 (키)의 값 병합

  29. 29

    연관 배열 반전

뜨겁다태그

보관