2014-09-03 2 views
0

DIR이 모든 인수 (공백 및 ""포함)를 통해 반복되도록합니다. 그러나이 코드는 "cd ef"를 인식하지 못합니다. 그들을 둘로 나눕니다. 어떻게하면됩니까?변수에서 bash 인수를 사용한 다음 루프를 수행합니다.

#test.sh 
echo Number of arguments: $# 

if [ $# -eq 0 ] 
then 
    echo "No arguments" 
    DIR=. 
else 
    DIR="$*" 
fi 

echo DIR =$DIR 
for arg in $DIR; 
do 
    echo $arg; 
done 

명령

#bash test.sh ab "cd ef" 

출력, 인수의 수 : 2

그러나, ab, cdef로 루프의 3 개 요소를 열거.

나는 내가 할 수있는, 알고,

for arg in "$*"; 

그러나이 경우하지의 해결책이

. 이 목적으로 DIR을 사용할 수 있습니까? 플랫폼은 OSX Mavericks 쉘입니다.

if (($#)); then 
    dirs=("[email protected]") 
else 
    dirs=(.) 
fi 

for dir in "${dirs[@]}"; do 
    ... 
done 

도 참조 BashFAQ #5 : 및 "[email protected]"하지 $* -

+2

는'$의 *는'사용하기에 거의 결코 적절한을 - 그것은의 첫 번째 문자로 인수를 연결합니다 'IFS'는 IFS의 첫 번째 문자를 포함하는 인수가 발생하는 경우 인수를 구분하는 문자와 인수 * 내의 문자를 구분할 수 없음을 의미합니다. –

+0

또한 내 보낸 적이없는 기본 변수에는 환경 변수 및 내장 변수와 잠재적 인 네임 스페이스 충돌을 피하기 위해 하나 이상의 소문자 변수가 있어야합니다. –

+1

BashFAQ # 50, http://mywiki.wooledge.org/BashFAQ/050은 적절하지 않은 곳에서 스칼라 변수를 사용하게되는 많은 오해를 해결하기 때문에 (접선으로) 관련이 있습니다. –

답변

4

당신은 이 목적을 위해 배열 아닌 일반 스칼라 변수를 사용해야합니다.

1

실제로 변수 DIR이 필요하지 않은 경우, 당신은 매개 변수 확장의 형태로 사용할 수 있습니다

echo "DIR=${@:-.}" 
for dir in "${@:-.}"; do 
    ... 
done 
관련 문제