연관 배열에 명령 출력을 채우려고합니다. 나뿐만 명령없이 작업을 수행 할 수 있습니다bash 연관 배열을 명령 출력으로 채우려면 어떻게해야합니까?
$ declare -A x=([first]=foo [second]=bar)
$ echo "${x[first]}, ${x[second]}"
foo, bar
와 나는 같은 명령 출력 비 연관 배열을 채울 수 있습니다 :
$ declare y=($(echo 'foo bar'))
$ echo "${y[0]}, ${y[1]}"
foo, bar
를하지만 만들 수 위의 모두 빌드 할 때 왜 내가 그 오류 메시지가 무엇입니까
$ declare -A z=($(echo '[first]=foo [second]=bar'))
-bash: z: $(echo '[first]=foo [second]=bar'): must use subscript when assigning associative array
과 연관을 채울 올바른 구문 것입니다 : 명령에서 연관 배열을 채 웁니다 성명, 나는 다음과 같은 오류 메시지가 명령의 출력을 가진 배열? 나는 the usual reasons에 eval
을 사용하지 않으려 고합니다. 임시 파일을 사용하고 싶지는 않습니다. 물론 echo
은 문제의 효과를 생성하는 명령의 예로 사용됩니다. 실제 명령은 더 복잡해집니다.
그냥 내가이 문제였다 인용 것처럼 그래서, 아래의 답변의 몇 가지를 기반으로, 그것은 같습니다
$ declare -A z="($(echo '[first field]="foo with space" [second]="space bar"'))"
$ echo "${z[first field]}, ${z[second]}"
foo with space, space bar
그럴 수 있습니다. 우리는'IFS ='를 추가 할 필요가 있고,'$ '...' '를 사용하거나'\ t'을 탭으로 변환 할 수는 없습니다.하지만 우리는 아마 각 배열 요소 사이에 문자형 개행 문자 또는 NUL 문자 (그리고 NUL 플래그로 읽음)를 얻습니다. 고마워! 고마워! –
우리는 내부에서'$ REPLY' 변수를 사용하고 있지만 그것을 사용하는데 해를 끼치 지 않는다면'IFS ='가 필요 없다는 말을 들었습니다. (편집) – anubhava
흠, newlines은 실제로 값을 분리하는 데 차이를 만들지 않습니다. 스크립트는 값이 공백으로 분리되어있을 때 작동합니다. printf는 끝에 하나의 개행 만 있으면됩니다. –