인수가 있는 함수에서 For 루프가 작동하지 않습니다.

인수가 있는 함수에서 For 루프가 작동하지 않습니다.

그래서 디렉터리의 모든 파일에서 주어진 인수로 for 루프를 수행하고 모든 파일과 디렉터리를 인쇄하는 함수를 만들고 있습니다.

#!/bin/bash

List () {
    for item in $1
            do
            echo "$item"
            done
}

List ~/*

그러나 스크립트를 실행하면 디렉토리의 첫 번째 파일만 인쇄됩니다.

어떤 아이디어가 있나요?

답변1

디렉토리의 파일을 반복하려는 경우 다음과 같이 디렉토리를 glob해야 합니다.

#!/bin/bash

List () {
    for item in "${1}/"*
            do
            echo "$item"
    done
}

그런 다음 다음과 같이 호출하십시오.

$ list ~

또는 여러 파일을 인수로 전달하려는 경우 다음을 작성할 수 있습니다.for 다음과 같이 루프를 작성할 수 있습니다.

List () {
    for item
            do
            echo "$item"
    done
}

그러면 다음과 같이 호출될 수 있습니다.

$ list ~/*

현재 기능에 어떤 문제가 있나요?

glob으로 호출하면 디렉터리의 각 파일을 별도의 인수로 전달합니다. 홈 디렉토리에 file1, file2및 가 포함되어 있다고 가정해 보겠습니다 file3. 에 전화하면 list ~/*본질적으로 다음을 호출하게 됩니다.

list ~/file1 ~/file2 ~/file3

그럼 당신의for 루프에는 위치 매개변수 1만 전달되므로 for item in ~/file1다른 위치 매개변수는 사용되지 않습니다.

또한 당신이 잊어버린 것을 지적해 준 Ilkkachu에게도 감사드립니다./또한 내가 완전히 놓쳤던 해시뱅에서

관련 정보