Unix의 위치 매개변수에 대해 읽고 있었는데 다음을 발견했습니다.
쉘에서는 명령줄에 최소 128개의 인수가 포함될 수 있지만 쉘 프로그램은 주어진 시간에 $1부터 $9까지 9개의 위치 인수를 참조하도록 제한됩니다. Shift 명령을 사용하여 이 제한 사항을 해결할 수 있습니다.
그래서 다음과 같은 간단한 쉘 스크립트를 만들었습니다 file
.
#! /bin/bash
echo $14
그런 다음 다음과 같이 실행하십시오.
./file 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
나는 14개를 얻었다!
shift
그렇다면 쉘이 명령을 사용하지 않고 10개 이상의 인수($0에서 $9까지)를 허용하지 않는 경우 이것이 어떻게 가능합니까?
답변1
당신이 달릴 때
echo $14
무슨 일이 일어나는지는 bash가 인수를 개별적으로 해석한다는 것 $14
입니다 . 그런 다음 확장되고 (이 경우 "1"과 동일) 문자열이 추가되어 "14"가 됩니다. 이것이 예상한 것이지만 실제로는 Bash가 실제로 작동하는 방식의 부작용입니다. 댓글에 언급된 @steeldriver처럼 다음과 같이 스크립트를 실행하세요.$1
4
$1
4
./file a b c d e f g h i j k l m n
그러면 호출은 echo $14
"n"이 아닌 "a4"를 출력합니다.
변수는 큰따옴표로 묶여 있습니다.
echo "$14"
Bash에서는 변수가 여전히 올바르게 확장되지 않습니다. 표준 접근 방식은 변수 이름 주위에 중괄호를 사용하는 것입니다.
echo ${14}
자세한 내용은 공식 문서를 참조하세요.매개변수 확장배쉬에서. 또한 다음과 같은 더 멋진 일을 많이 할 수 있습니다.
${14^^*}
매개변수 번호 14를 대문자로 표기합니다. 읽어! :)