for 루프 객체에 대한 BASH 작업

for 루프 객체에 대한 BASH 작업

forloop 개체에 대해 bash 명령을 실행하려고 하는데 forloop 개체를 사용하는 대신 파일을 찾으려고 합니다.

예:

입력 파일에는 다음 형식의 줄이 포함되어 있습니다.user:password

for item in $(cat myItems);do
        USER = cat $item | cut -d ":" -f1
        PASS = cat $item | cut -d ":" -f2
done

결과는 $item 파일을 찾을 수 없다는 것입니다.

나도 시도했다

for item in $(cat myItems);do
        USER = $(cat $item | cut -d ":" -f1)
        PASS = $(cat $item | cut -d ":" -f2)
done

답변1

파일의 각 줄에 대해 일부 명령을 실행해야 하는 경우 다음과 같이 작성할 수 있습니다.

while IFS=: read -r user password rest_ignored; do
  something with "$user" and "$password"
done < myItems

catvar=value은 할당 구문 주위에 공백 없이 파일을 연결하는 명령입니다 =. $(...)줄 바꿈에서 명령 출력을 분할하는 것이 가능하지만 올바르게 설정 $IFS하고 와일드카드를 비활성화한 경우에만 가능합니다.

답변2

이것은 당신이 원하는 것을 달성하고 원래 원했던 스크립팅 접근 방식을 유지하는 것 같습니다.

$ cat myItems
user:pass
user2:pass2
$ for item in $(cat myItems);do
    USER=$(echo $item | cut -d ":" -f1)
    PASS=$(echo $item | cut -d ":" -f2)
    echo user $USER pass $PASS
done
user user pass pass
user user2 pass pass2
$

관련 정보