특수 매개변수 쿼리 - 명령 이름을 얻기 위한 다중 쿼리? [복사]

특수 매개변수 쿼리 - 명령 이름을 얻기 위한 다중 쿼리? [복사]

Bash 스크립팅에서 제공한 uni 텍스트에서 다음과 같은 변수 할당이 막혔고 아직 누구로부터도 답장을 받지 못했습니다. 여기 누군가가 도움을 줄 수 있기를 바랍니다.

name=${0##*/}  

입력한 명령의 이름을 제공하려면 이를 확장해야 합니다. 중괄호 안의 첫 번째 문자가 0이므로 매개변수 $0에서 이 값을 가져오는 방법을 알 수 있습니다. 그런데 이전 페이지의 정보(해당 uni 문서)와 지금까지 온라인에서 살펴본 소스에 따르면 #은 스크립트 호출 시 사용할 인수 개수를 나타내고, *는 인수를 문자열로 포함하고 있습니다. 어떻게 이 모든 특수 매개변수가 매개변수 $0으로만 확장되는지 이해할 수 없습니다.

이름을 다음과 같이 확장하고 싶습니다: code/script2 3 3 code/script2 fred george allison.

누군가 중괄호 사이의 각 특수 매개변수가 이름: code/script2로 확장되는 역할을 설명할 수 있다면 정말 감사하겠습니다.

도움을 주셔서 미리 감사드립니다!

다음은 컨텍스트의 전체 스크립트와 출력입니다.

1  #!/bin/bash
2  # A simple script showing some of the special variables
3
4 echo "The full name of this script is $0" 
5
6 name=${0##*/}
7
8 echo "The name of this script is $name"
9
10 echo "The process ID of this script is $$"
11
12 echo "This script was called with $# parameters" 13
14 echo "The parameters are \"$*\""
16  echo "Parameter 1 is - $1"
17  echo "Parameter 2 is - $2"
18  echo "Parameter 3 is - $3"

prompt: code/script2 fred george allison
The full name of this script is code/script2 
The name of this script is script2
The process ID of this script is 3501
This script was called with 3 parameters The parameters are "fred george allison"
Parameter 1 is - fred
Parameter 2 is - george
Parameter 3 is - allison 

답변1

당신은 혼란스러워요 ${#var}(이것은 반환길이var) 반환 ${var##substr}값은 var다음 이후에 반환됩니다.가장 긴 접두사 일치 제거 substr.

이 경우 하위 문자열은 */호출 스크립트 이름의 모든 선행 경로 구성 요소이며 최종 파일 이름 구성 요소만 남깁니다 script2. 두 표현식 모두 이 문자를 사용하지만 #위치가 #중요합니다.

${var#substr}표면적으로는 더 가까워 보이지만 삭제 후 ${#var}값을 반환하는 값 도 있습니다.var가장 짧은접두사와 일치합니다.

예시 보기문자열의 일부 삭제

관련 정보