2016-07-27 8 views
0

나는 디렉토리를 a1..a5, b1..b5 및 c1..c5있습니다. 각 디렉토리 안에는 두 개의 파일 a1, b1c1이 있습니다.두 번 배쉬 명령 치환

do mkdir /tmp/{a,b}$d; touch /tmp/{a,b,c}$d/{a,b,c}1; done; 

'a'로 시작하는 디렉토리 안에 'a'또는 'b'로 시작하는 모든 파일을 가져 오려고합니다.

DATA="/tmp/{a,b}*" 
echo ${DATA} 
DIRS=`ls -1 -d ${DATA}/a*` 
echo ${DIRS} 

에서 : 나는 파일을 얻을 나중에 디렉토리를 저장하고 데이터라는 변수를 사용합니다,

/tmp/a1/a1 /tmp/a2/a1 /tmp/a3/a1 /tmp/a4/a1 /tmp/a5/a1 /tmp/b1/a1 /tmp/b2/a1 /tmp/b3/a1 /tmp/b4/a1 /tmp/b5/a1

을 지금 : 나는 그것을 할 수 있습니다

DIRS=`ls -1 -d /tmp/{a,b}*/a*` 
echo ${DIRS} 

및 취득 출력, 데이터 내용은 OK (/tmp/{a, b} *)이지만 다음과 같은 오류 메시지가 나타납니다.

ls: cannot access /tmp/{a,b}*/a*: No such file or directory

왜 이런 일이 발생하는지 알고 싶습니다.

답변

1

나는이 문제를 해결했지만 이전 시도가 실패한 이유에 대한 언급을 찾을 수 없습니다.

DATA="/tmp/{a,b}*" 
echo ${DATA} 
DIRS=`eval "ls -1 -d ${DATA}/a*"` 
echo ${DIRS} 

출력 : 글로브 확장 단어 분할 후 발생합니까 동안 글로브와 중괄호 확장, 따옴표 또는 문자열 할당을 두 번에 발생하지 않기 때문에

/tmp/a1/a1 /tmp/a2/a1 /tmp/a3/a1 /tmp/a4/a1 /tmp/a5/a1 /tmp/b1/a1 /tmp/b2/a1 /tmp/b3/a1 /tmp/b4/a1 /tmp/b5/a1

+1

이 발생합니다. 이것은'echo something'을했을 때'var = something; echo $ var', 둘 다 glob을 확장 시키게 될 것이지만, 이전의 것만이 중괄호를 확장하게 될 것입니다. –

+0

감사합니다 !!! @thatotherguy –