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
가장 짧은접두사와 일치합니다.
예시 보기문자열의 일부 삭제