Bash glob은 여러 매개변수로 확장됩니다.

Bash glob은 여러 매개변수로 확장됩니다.

저는 bash 스크립팅을 처음 접했습니다. 여러 컴퓨터에 ping을 보내는 스크립트가 있습니다. "I"는 다음과 같이 썼습니다.

for var in "$@"
do
        ping -c 1 -W 2 "$var" > /dev/null
        echo $var = $?
done

내가 하고 싶은 것은 유사한 이름을 가진 여러 컴퓨터를 핑하기 위한 입력으로 단일 글로브를 허용하는 것입니다.

예: pingall machine[:01-06:]하지만 이것을 구현하는 방법을 모르겠습니다.

답변1

와일드카드다른 이름이다파일 이름 생성또는경로명 확장.

이는 쉘 와일드카드를 일치하는 파일 목록으로 변환하는 프로세스입니다. 그것은 단지 사용될 수 있습니다기존의문서.

여기서 대신 중괄호 확장을 사용할 수 있습니다.

pingall machine{01..06}

쉘은 해당 이름의 파일이 현재 디렉토리에 있는지 여부에 관계없이(와일드카드 아님) 단일 인수 로 확장 됩니다 machine01.machine02machine06

이 구문은 zsh최신 버전의 .bashyash -o braceexpand

을 사용하려면 ksh93다음을 사용할 수 있습니다.

pingall machine{1..6%02d}

이 특별한 경우에는 다음을 사용할 수도 있습니다.

pingall machine0{1..6}

GNU seq명령을 사용하면 다음을 수행할 수도 있습니다(기본값은 이라고 가정 $IFS).

pingall $(seq -f machine%02.0f 6)

답변2

패턴은 파일 이름과 일치하는 경우에만 확장됩니다. 대신 중괄호 확장을 사용할 수 있을까요? 스크립트 실행

pingall machine0{1..6}

이는 다음으로 확장됩니다.

pingall machine01 machine02 machine03 machine04 machine05 machine06

관련 정보