저는 쉘 프로그래밍의 기초를 배우고 있어서 다음과 같은 간단한 것을 작성했습니다.
#!/bin/bash
read var1
read var2
if [ var1 -lt var2 ]; then
echo "var1 is lt var2"
else
echo "var2 is lt var1"
fi
제가 이해한 바에 따르면 Bash에서는 변수의 유형이 지정되지 않았으며 숫자만 포함된 모든 변수는 정수로 사용될 수 있습니다. 하지만 이것을 실행하면 "정수 표현식이 필요합니다"라는 오류가 발생합니다. 왜 그럴까요?
답변1
declare
실제로 (또는 이전 ) 내장 기능을 사용하여 변수에 일부 속성을 설정할 수 있습니다 typeset
. declare -i var1 var2
해당 변수에 정수 속성을 설정합니다. 그 후 해당 변수에 정수가 아닌 값을 설정하려고 시도하면 오류가 발생합니다.
하지만 문제는 구문에 있습니다. 변수의 값을 사용할 때 이름 앞에 다음을 붙여야 합니다 $
.
if [ "$var1" -lt "$var2" ]; then
echo "$var1 is lt $var2"
else
echo "$var2 is lt $var1"
fi
예외는 다음이 필요하지 않은 산술 평가입니다 $
.
if ((var1<var2)); then
echo "$var1 is lt $var2"
else
echo "$var2 is lt $var1"
fi
경고의 말씀으로, 단어 확장으로 인해 표현식의 구문이 엉망이 되는 것을 방지하려면 .. 안에 항상 변수를 큰따옴표로 묶어야 합니다 [
. ]
(즉, 설정되지 않은 변수, 빈 문자열이 포함된 변수 및 문자가 포함된 변수에 문제가 있을 것입니다 .) 또는 이러한 경우를 올바르게 처리하는 대신 더 새롭고 더 나은 .. IFS
을 사용할 수 있습니다 .[[
]]
if [[ $var1 -lt $var2 ]]; then
echo "$var1 is lt $var2"
else
echo "$var2 is lt $var1"
fi
답변2
이름 앞에 변수를 참조해야 합니다.$
if [ $var1 -lt $var2 ] ; then...