스크립트에서 명령을 사용하여 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부터 사용 가능합니다.