파일을 생성한다고 가정해 보겠습니다 ~/myScript.sh
.
#!/bin/sh
for myVar; do
echo "Hi"
done
인수 없이 실행 하면 bash myScript
아무것도 얻지 못하지만, 하나 이상의 인수를 사용하여 실행하면 이러한 변수의 수에 따라 출력을 얻습니다 (변수는 전달된 인수에 스크립트를 종속시키는 것으로 보입니다) .
bash ~/myScript.sh arg0 arg1
정의되지 않은 변수를 기반으로 하는 for 루프는 및 자체에 myVar
적용되며 (잘못 표현된 경우 죄송합니다) 다음과 같은 출력을 얻습니다.arg0
arg1
안녕하세요
안녕하세요
(매개변수당 하나의 "hi")
처음에는 루프가 하나의 매개변수로 작동한다고 가정했습니다 . 따라서 and for
가 있고 and 가 있으면 and 가 작동 하지만 추가 테스트를 해보니 틀렸습니다. 모든 루프는 모든 매개변수로 작동합니다.myVar_0
myVar_1
arg0
arg1
myVar_0
arg_0
myVar_1
arg1
for
#!/bin/sh
for myVar_0; do
echo "Hi"
done
for myVar_1; do
echo "Hello"
done
반환됩니다 bash myScript arg0 arg1
:
안녕하세요
안녕하세요
안녕하세요
안녕하세요
참고 사항: "for 루프당 1개의 인수"를 원한다면 로컬 범위에서 Bash 함수를 사용해야 한다고 가정합니다.
내 질문
Bash와 일치하는 "모든 for 루프의 모든 매개변수"의 이름은 무엇입니까?
답변1
myVar
위치 인수를 사용하여 스크립트를 호출하는 경우 정의되지 않습니다. 남자 배쉬에서 :
For the name [ [ in [ word... ] ] ] list of things to do; done
[...] in 단어가 생략되면 for 명령은 각 위치 매개변수 세트에 대해 목록을 한 번 실행합니다.
하지만 당신은 그것을 사용하지 않습니다 $myVar
.
for myVar; do
echo "$myVar"
done
답변2
Bash/POSIX 셸의 루프는 Python의 루프 for
와 유사합니다 for
. 루프 변수는 나열된 값을 하나씩 가져오고 루프 본문은 각 값에 대해 한 번 실행됩니다.
그래서 이거:
for x in foo bar; do
echo "$x"
done
echo finally x is "$x"
비슷하다
x=foo # assign value
echo "$x" # loop body
x=bar # same with the second value...
echo "$x"
echo finally x is "$x" # this isn't part of the loop body
루프 본문을 반복할 필요가 없다는 것뿐입니다. 배열 변수가 있는 경우 A
배열 for x in "${A[@]}"; do...
값을 반복합니다. for x in "$@"; do...
위치 매개변수, 즉 명령줄 매개변수 는 "$@"
확장 내용 이므로 유사하게 반복됩니다. 기본적으로 for x; do
는 그냥 약어임for x in "$@"; do
따라서 이것은 모든 명령줄 인수를 인쇄합니다.
x에 대해 #또는:"$@"의 x에 대해; printf "%s\n" "$x" 완벽한
인덱스로 매개변수에 직접 접근하려면 $1
첫 번째 매개변수, $2
두 번째 매개변수 등을 사용하세요.
printf "the first arg is %s and the second is %s\n" "$1" "$2"