중첩 된 매개 변수 확장을 다룰 때 다음 중 어떤 것을 인용하는 올바른 방법입니까?
이 하나:
var="${var#"${var%%[![:space:]]*}"}"
또는 이거 :
var="${var#${var%%[![:space:]]*}}"
나는 그것이 두 가지 방법을 수행하는 것을 보았다. 첫 번째 변형은 Stack Overflow 답변의 일부 입니다. 질문에 대한 가장 높은 찬성 응답 중 하나입니다 (질문은 변수에서 공백을 제거하는 방법에 관한 것입니다).
또한 리터럴 텍스트 대신 변수 인 "단어"또는 "패턴"으로 작업 할 때 인용하는 방법을 설명하는 평판이 좋은 소스를 찾는 데 어려움이 있습니다. 아래 두 가지 중 어느 것이 맞습니까?
이 하나:
strip_ext="${filename%."$filename_ext"}"
또는 이거 :
strip_ext="${filename%.$filename_ext}"
두 경우 모두 첫 번째 방법은 일반적으로 원하는 것입니다. 의 오른쪽에있는 문자열 ${var#*a}
이 인용되지 않으면 패턴으로 해석 / 확장됩니다. 이 예에서는 첫 글자까지의 선행 텍스트를 제거합니다 a
. 인용 된 경우 : ${var#"*a"}
확장은 리터럴을 제거합니다 *a
. 다음과 같은 경우 문제가 될 수 있습니다.
"${filename%."$filename_ext"}"
는 "$filename_ext"
패턴 문자를 포함 할 수 있습니다. 마찬가지로 $var
in에 "${var#"${var%%[![:space:]]*}"}"
패턴 문자 (*? [)가 포함될 수 있고 패턴으로 해석되지 않도록하려면 확장을 다음과 같이 인용하십시오.
"${var#"${var%%[![:space:]]*}"}"
변수 할당의 오른쪽은 따옴표로 간주되며 따옴표가 필요하지 않습니다 (하지만 해가되지 않음).이 두 가지도 정확합니다.
var=${var#"${var%%[![:space:]]*}"}
strip_ext=${filename%."$filename_ext"}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다