콘솔에서는 작동하지만 스크립트에서는 작동하지 않는 와일드카드와 대괄호가 있는 ls

콘솔에서는 작동하지만 스크립트에서는 작동하지 않는 와일드카드와 대괄호가 있는 ls

명령:

ls /etc/pve/lxc/*([0-9]).conf

콘솔에서 작업:

  • 결과: 파일을 찾았습니다!
/etc/pve/lxc/107.conf

하지만 스크립트에는 없습니다:

  • #!/bin/bash
  • 결과: 오류
syntax error near unexpected token `('
ls /etc/pve/lxc/*([0-9]).conf

그런 다음 스크립트에서 대괄호를 마스킹했습니다.:

ls /etc/pve/lxc/*\([0-9]\).conf
  • 결과: 파일을 찾을 수 없습니다.
ls: cannot access '/etc/pve/lxc/*([0-9]).conf': No such file or directory

답변1

표현은 *([0-9]).confKSH 스타일입니다확장된 글로브. 이 기능은 대화형 bash 셸에서 기본적으로 활성화되어 있지만 bash 스크립트에서 사용하려면 다음을 사용하여 명시적으로 활성화해야 합니다.

shopt -s extglob

또한보십시오명령줄에서는 작동하지만 bash 스크립트에서는 작동하지 않는 와일드카드 확장

답변2

제공하지 않은 정보는 스크립트에서 어떤 명령 해석기가 사용되는지입니다. 이는 shebang, 즉 첫 번째 줄(예: #/bin/sh)로 표시됩니다.

Ubuntu에서 콘솔은 기본적으로 bash를 대화형 셸로 실행합니다. 스크립트가 다른 명령 해석기를 사용하는 경우(예: /bin/sh) bash 관련 구문은 작동하지 않습니다.

관련 정보