쉘 스크립트를 작성 중인데 인용된 와일드카드를 해석해야 합니다.
"R Programming*"
*
나는 별표를 문자 그대로 받아들이고 싶지 않습니다 . 와일드카드로 해석하고 싶습니다.
"R Programming"*
sed
명령을 사용하여 첫 번째를 두 번째로 변환할 수 있나요? 나는 그것이 어떤 문자열에서도 작동하기를 원합니다.
답변1
을 포함하는 셸 변수가 있고 현재 작업 디렉터리에서 in으로 시작하는 파일 이름 R programming*
으로 확장하려는 경우 요청을 사용하여 확장을 패턴으로 처리하고 와일드카드 결과를 수행할 수 있습니다.R programming
zsh
$~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*
없습니다 .bash
failglob
nullglob