") 구문 오류 잘못된 산술 연산자("로 표시된 오류)

") 구문 오류 잘못된 산술 연산자("로 표시된 오류)

스크립트에서 명령을 사용하여 bash소스 텍스트 파일에서 데이터를 가져온 다음 여기에 변수 값을 추가하고 if/else 조건에서 사용합니다.

소스 데이터 파일( db_count.ini)(참고: 큰따옴표 안에 공백이 있습니다):

db_ctdy_sr=" 7"

스크립트:

source db_count.ini

# Removing the whitespace on the stored data
n_db_sr=${db_ctdy_sr// /}

# Sum
c=0
b=7

echo "Value of db:"$n_db_sr

sm=$((n_db_sr + c))

echo "The value of db:"
echo "$sm" 
echo $sm 

if [ "$sm" = "$b" ]
then
   echo "Success."
else
   echo "Not."
fi

echo "Bye!"

하지만 스크립트를 실행하면 항상 다음과 같이 표시됩니다.

The value of db:7
") Syntax error Invalid arithmetic operator (error token is "
The value of:


Not.
Bye!

어떤 팁이 있나요? 어떤 제안이 있으십니까?

감사해요!

답변1

스크립트가 여기에서 실행됩니다. 보고한 것과 동일한 오류가 발생하도록 하는 유일한 방법은 변수에 다음을 db_ctdy_sr포함 시키는 것입니다 new line.

새 줄 추가:

source db_count.ini
db_ctdy_sr=$' 7\r'

그런 다음 스크립트를 테스트합니다.

$ ./so

Value of db:7
")syntax error: invalid arithmetic operator (error token is "
The value of db:
 //test if working
//test if working
Not.
Bye!

파일에 DOS 캐리지 리턴 문자가 포함된 경우 db_count.ini이러한 현상이 발생할 수 있습니다 .

구현하다:

$ sed -n l db_count.ini
db_ctdy_sr= 7\r$

\r(또는 유사한) 파일을 보려면 .

파일을 편집하고 실패 문자를 제거하거나 다음 줄을 변경하여 캐리지 리턴을 제거하십시오.

n_db_sr=${db_ctdy_sr// /}

도착하다:

n_db_sr=${db_ctdy_sr//[ $'\r'}]}

또는 더 일반적으로는 모든 제어 문자를 제거합니다.

n_db_sr=${db_ctdy_sr//[ $'\001'-$'\037']}

조합 순서가 ASCII 값의 예상 순서를 1(8진수 001)에서 31(8진수 037)까지 수정하지 않도록 하려면 bash 변수를 설정합니다.

shopt -s globasciiranges

bash 버전 4.3부터 사용 가능합니다.

관련 정보