인용된 와일드카드를 해석하는 방법

인용된 와일드카드를 해석하는 방법

쉘 스크립트를 작성 중인데 인용된 와일드카드를 해석해야 합니다.

"R Programming*"

*나는 별표를 문자 그대로 받아들이고 싶지 않습니다 . 와일드카드로 해석하고 싶습니다.

"R Programming"*

sed명령을 사용하여 첫 번째를 두 번째로 변환할 수 있나요? 나는 그것이 어떤 문자열에서도 작동하기를 원합니다.

답변1

을 포함하는 셸 변수가 있고 현재 작업 디렉터리에서 in으로 시작하는 파일 이름 R programming*으로 확장하려는 경우 요청을 사용하여 확장을 패턴으로 처리하고 와일드카드 결과를 수행할 수 있습니다.R programmingzsh$~string

string="R programming*"
print -rC1 -- $~string

(또는 print -rC1 -- $~string(N)일치하는 파일이 없으면 오류 대신 출력이 표시되지 않습니다.)

In bash및 기타 모든 Bourne 유사 쉘 와일드카드는 기본적으로 따옴표가 없는 인수 확장(!) 및 단어 분리에서 수행됩니다. 여기서 공백 문자는 후자를 수행하는 기본값이므로 $IFS와일드카드를 수행하기 전에 합계 R programming*로 분할 됩니다 R. 이를 방지하려면 programming*값을 변경할 수 있습니다 .$IFS

string="R programming*"
IFS=
shopt -s failglob
printf '%s\n' $string

또는 일치하는 파일이 없으면 출력이 없습니다.

string="R programming*"
println() {
  [ "$#" -eq 0 ] || printf '%s\n' "$@"
}
shopt -u failglob
shopt -s nullglob
IFS=
println $string

POSIX sh에서는,

string="R programming*"
IFS=
printf '%s\n' $string

일치하는 파일이 없으면 R programming*출력으로 표시됩니다(말 그대로 호출된 단일 파일이 있는 것처럼 ). 이는 Bourne 쉘에서 상속된 버그 기능이며 s 또는 에 해당하는 표준이 R programming*없습니다 .bashfailglobnullglob

관련 정보