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, cd
및 ef
로 루프의 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]"
하지 $*
-
는'$의 *는'사용하기에 거의 결코 적절한을 - 그것은의 첫 번째 문자로 인수를 연결합니다 'IFS'는 IFS의 첫 번째 문자를 포함하는 인수가 발생하는 경우 인수를 구분하는 문자와 인수 * 내의 문자를 구분할 수 없음을 의미합니다. –
또한 내 보낸 적이없는 기본 변수에는 환경 변수 및 내장 변수와 잠재적 인 네임 스페이스 충돌을 피하기 위해 하나 이상의 소문자 변수가 있어야합니다. –
BashFAQ # 50, http://mywiki.wooledge.org/BashFAQ/050은 적절하지 않은 곳에서 스칼라 변수를 사용하게되는 많은 오해를 해결하기 때문에 (접선으로) 관련이 있습니다. –