운영체제 : Ubuntu 16.04.3
쉘 : Bash 4.3.48
에서 var=value command
와 같이 변수의 내용을 일시적으로 변경하는 것이 가능하다는 것을 알고 있습니다 IFS= read -r var
.
그리고 Greg의 Wiki 덕분에 다음 사항도 이해합니다.
# Why this
foo() { echo "$var"; }
var=value foo
# And this does work
var=value; echo "$var"
# But this doesn't
var=value echo "$var"
내 이해에서 벗어나는 것은 이것입니다.
$ foo() { echo "${var[0]}"; }
$ var=(bar baz) foo
(bar baz)
내가 아는 한 (그리고 이전 예제의 논리를 따르면) 인쇄 bar
하지 않아야 (bar baz)
합니다.
이것은 나에게만 발생합니까? 이것이 의도 된 동작입니까, 뭔가 빠졌습니까? 아니면 버그입니까?
답변
일반적으로 전화 :
var=value cmd
cmd
기능이 이식성이없는 곳 은 어디 입니까?
와 bash
스칼라 변수를 작동, (그리고와 x=(...)
배열로 해석하지만, 스칼라로 할당)하고 해당를 할 경우로 범위 지정에 문제가 있습니다 ksh93
와 yash
, 작동하지만 변수 정의는 이후 남아있다가. 를 사용하면 mksh
구문 오류가 발생합니다. Bourne 쉘에서는 스칼라 변수조차도 전혀 작동하지 않았습니다.
또한 스칼라 변수의 경우에도 변수가 함수 내 에서 내보내 지는지 (즉, 실행중인 명령에 전달 되는지 ) 쉘마다 다릅니다 (bash, yash, mksh, zsh에 있지만 ksh에는 없음). 금연 건강 증진 협회).
예상 한 방식으로 만 작동합니다 zsh
. 참고 zsh
배열 인덱스는 1부터 시작한다.
bash-4.4$ zsh
$ a=(before value)
$ f() echo $a[1]
$ a=(temp value) f
temp
$ echo $a[1]
before
답변
그것은 단지 버그가 아니며 구현 계획이없는 구현되지 않은 기능 인 것 같습니다. 2014 년에 작성된 이 메일 링리스트 게시물 은 작성자의 게시물 입니다.
다행히도 bash 4.3 (패치 레벨 25)에서는 -DARRAY_EXPORT 만 할 수없고 배열 변수 가져 오기 / 내보내기를 수행 할 수 없습니다. 코드는 컴파일되지 않으며, 수정하면 연결되지 않으며, 수정하면 다음 문제가 발생합니다.
이것만으로도 많은 어려움이 있습니다. 어레이 내보내기를 활성화 할 계획이 없습니다.
Bash의 최신 git repo에서 가져 오는 것은 다음과 variables.c
같습니다.
# if ARRAY_EXPORT
/* Array variables may not yet be exported. */
완료되지 않은 것을 제안합니다.
답변
로부터 man bash
의 버그 섹션 (의 버전은 bash
4.3입니다) :
버그
Array variables may not (yet) be exported.
다음 코드는 함수가 실행되는 동안에 만 임시 변수가 환경에 존재 함을 보여줍니다. 기능이 완료되면 임시 변수가 사라집니다.
### defining the "bar" function
### it pass all environment variables to the "grep" command
### and the "grep" prints the only "my_var" variable from it
bar() { env | grep my_var=; }
### calls the "bar" function with the temporary
### variable "my_var" created and assigned.
my_var=one bar
my_var=one ### The output. The environment contains the "my_var" variable
### checks, does the environment still have the "my_var" variable
### (It doesn't have.)
env | grep my_var=
### The output is empty,
### the environment doesn't contain the "my_var" variable
관련 정보:
VAR=VALUE some-command
건설 에 대한 답변 .- bash 스크립트에서 배열 내보내기
- bash : 배열 환경 변수를 설정하고 쉘 스크립트에서 변수를 역 참조하는 데 실패