$1 $2
명령줄( )에서 스크립트의 여러 매개변수를 가져옵니다.
입력되는 값이 쓰레기가 아닌지 확인하기 위해 테스트해 보았습니다.
if [ $1 ]; then
INPUT=$1
if [[ -n ${INPUT//[0-9]/} ]]; then
즉, 비어 있지 않고 0-9(숫자)로 구성되어 있는지 확인하려고 합니다. $1
즉 누군가 입력이 없거나 script string more_strings
간단하고 매개 변수가 없는 script
것과 같은 것 대신에script 12 321
그런 다음 $INPUT
(저는 $1도 시도했습니다)를 정수로 처리해 보십시오.
if [ $INPUT -gt 100 ]; then
INPUT=100
fi
실패했습니다. 에코 테스트에서 문자열이 있는 것 같습니다(gt를 사용하고 있음에도 불구하고 - 정수로 평가한다는 의미라고 가정합니까?). $1을 정수로 가져오거나 평가하는 방법을 잘 모르겠습니다. ?
http://mywiki.wooledge.org/BashFAQ/054
나는 이렇게 하라고 조언받았습니다:
if [[ $1 != *[!0-9]* ]]; then
그러나 나는 거기에서 무슨 일이 일어나고 있는지 이해하지 못합니다. 0-9가 아닌 것과 같지 않나요? ? ? 왜*?
재미있어 보이네요:
declare -i $1
그런데 $1이 영구적으로 변경된 것 같나요? 재배치까지?
입력이 A) 문자열인지 B) 숫자/정수인지 확인하기 위해 입력을 테스트하는 방법과 이를 스크립트에서 사용하는 방법(또는 변환 방법)을 알고 싶습니다. 설명을 듣는 것이 가장 좋습니다.
이전 질문에 대해 몇 가지 검색을 시도했지만 잘못된 용어를 검색한 것 같습니다. 이는 수행 방법을 잊어버렸거나 다른 곳에서 답변했어야 하는 매우 기본적인 것 같기 때문입니다.
여기에서도 찾을 수 없습니다:
https://ss64.com/bash/test.html
어쩌면 취침 시간이 필요할 수도 있습니다.
답변1
에서 연산자는 실제로 패턴 일치이므로 테스트 중인 값이 패턴과 일치하지 [[ .. ]]
않습니다 .=
[[ $1 != *[!0-9]* ]]
$1
*[!0-9]*
여기에 사용된 패턴은 파일 이름 확장과 동일하므로 *
모든 문자, [abc]
대괄호 사이의 문자 및 [!abc]
/또는 [^abc]
모든 문자 와 일치합니다.아니요괄호 사이(선행 !
또는 제외 ^
). 기본적으로 의 숫자가 아닌 $1
일부 문자가 포함되어 있는지 테스트합니다 .0
9
declare -i var
변수를 var
정수 변수로 표시합니다. 이에 대한 할당은 산술 컨텍스트에서처럼 해석되어 declare -i a; a=3+5; echo $a;
출력됩니다 8
. 하지만 위치 인수(예: )에는 사용할 수 없습니다 $1
. 대신 declare -i $1
에 포함된 문자열을 가져와 $1
사용합니다 .저것변수 이름으로. ( $
위에 내용은 없습니다 declare -i a
.)
declare -i
산술 문맥의 문자열은 변수로 취급되기 때문에 무언가가 숫자인지 테스트하는 데 실제로 사용할 수는 없습니다 .이름. 이것은 오류가 아닙니다: declare -i a; b=1+2; a=b; echo $a;
. 대신에 인쇄하는데 3
, 이는 원하는 것일 수도 있고 아닐 수도 있습니다.
답변2
입력이 있는지 확인하고 숫자(1자리 이상)인지 확인하려면 다음을 사용했습니다.전반적인 상황:
if [ $2 ]; then INPUT=$2 if [[ $INPUT = +([[:digit:]]) ]]; then
숫자가 아닌 입력을 테스트하는 것 같습니다.
if [[ -n ${INPUT//[0-9]/} ]]; then
답변3
일까츄처럼 좋은 설명이 없네
하지만 이 방법을 시도해 볼 수는 있습니다
[ ! -z $1 -a $1 -eq $1 ] 2>/dev/null && echo "integer $1" || echo "not integer $1"