2016-10-05 4 views
1

작동하지 않습니다 당신이 기대하는 것처럼zsh을 매개 변수 확장 내가 실행하는 경우, zsh을에서

a=$(echo "foo, bar") 
echo ${a[(ws:, :)1]} 

내가 foo를 얻을 수 (ws:, :, 될 수 있습니다 단어를 참조하는 인덱스의 원인 단어 분리 기호). 나는이 결합하려고하면

그러나 :

echo ${$(echo "foo, bar")[(ws:, :)1]} 

나는 foo, 얻을. 어떤 이유로 든 w 플래그가 올바르게 작동하지만 s:, : 플래그는 완전히 무시됩니다.

내가 뭘 잘못하고 있니?

자세한 정보 : 이것은 $ {} 내부의 $() 문제 일뿐입니다. $ {} 안에 $ {}을 중첩하면 아무런 문제가 없습니다.

$ zsh --version 
zsh 5.2 (x86_64-unknown-linux-gnu) 

답변

0

필드 분할은 인덱스 작업이 시작되기 전에 수행되므로 예상되는 동작이 나타납니다. 당신은 옆

echo ${"$(echo "foo, bar")"[(ws:, :)1]} 

한 주에 의해 예상 된 결과를 얻을 수 있습니다 : 내 첫 번째 시도는 사용하여 식을 다시 작성했다 {== ...} 필드 분할을 억제하도록되어 매개 변수 치환의 형태 ,

echo ${${==$(echo "foo, bar")}[(ws:, :)1]} 

을 즉 이것은하지 작업을 했다. 나는 이유를 모르겠다 ...

+1

'$ {=='은 확장을 위해 sh_word_split 옵션을 해제 만한다. 실제로 이것은 디폴트를 선언하는 것일 뿐이고 많은 영향을 미치지 않을 것입니다. – okapi

+0

"필드 나누기"및 "인덱스 작업"이 의미하는 바를 조금 더 설명하고 솔루션이 작동하는 이유는 무엇입니까? "$ (echo"and ")"를 인용하는 것처럼 구문 오류가 발생하는 것 같습니다. – Radvendii

+0

이전 Zsh 버전을 사용하고 있습니까? 내부 따옴표를 생략하거나 작은 따옴표로 바꿀 수 있습니다. [이 스크린 샷] (https://postimg.org/image/47xhi0zwz/)을 참조하십시오. – user1934428