2014-02-14 3 views
0

안녕하세요.이 .p8, .p16, * .p32와 같은 확장명을 가진 파일에 대한 작업을 시도하고 있습니다. 내가bash : 특정 확장명을 가진 모든 파일을 가져 오려고 시도합니다.

./pack_vectors [email protected] 
for var in "[email protected]" 
do 
if [ -f $var ]; 
then 
pack_list="${var/.dat/.p}" 
echo $pack_list 
# below line doesn't work 
for f in $pack_list+([:digit:]);do 

을 밖으로 얻고 무엇을 :

./wrapper.sh: line 10: syntax error near unexpected token `(' 
./wrapper.sh: line 10: `for f in $pack_list+([:digit:]);do' 

이유는 무엇입니까?

+0

을 시도해보십시오 ** LS * .P [0-9] \ *** – Marichyasana

답변

1

할 수있는 쉬운 방법이 find을 사용하는 것입니다

find . -name "*.p8" -o -name "*.p16" -o -name "*.p32

-o 변수에 할당 부울 OR

하는 것과 동일합니다, 이렇게 :

myvar=$(find . -name "*.p8" -o -name "*.p16" -o -name "*.p32")

1

가능한 한 쌍의 ssues. 에서 수행하려는 정규식 스타일의 파일을 수행하려면 extglob을 사용해야합니다. 따라서 for 루프 앞에

shopt -s extglob 

을 입력하십시오. 에서 posix 문자 클래스를 사용하려면 [[:digit:]]을 찾고 있습니다. 그래서 함께 그 퍼팅,

shopt -s extglob 
for f in ".p"+([[:digit:]]); do 

은 "$의 pack_list"그렇다 위의 ".P"로 대체 무엇인지 인용하지보십시오. 자리 : 그것은 지금 노력하고 있습니다

+0

: [($의 pack_list +에서 F를 위해 '(' ./wrapper.sh'예기치 않은 토큰 근처의 구문 오류 : 행 9 : ./wrapper.sh : 9 호선]]) 할 날을 얻는다 do : – exilat

+0

@ user3306484 무엇이'$ pack_list'입니까? – BroSlow

+0

"$ pack_list + ([[: digit :]])에서 f에 대해 을 사용하고 있습니다. "; – exilat

0

, BroSlow 응답의 변화의 비트가 : $의 pack_list + ([[에 F에 대한

for f in "$pack_list+([[:digit:]])"; do 
관련 문제