我必须为变量赋值,该变量的名称表示为其他变量的值。尝试这个我收到了错误消息:
Tesseract Open Source OCR Engine v3.04.00 with Leptonica
Page 1
Warning in pixReadMemTiff: tiff page 1 not found
script.sh: line 39: SCORE_LIM=8000: command not found
SCORE_LIM=216353
部分代码:
function RecognizeNumber #imagename varoutput
{
tesseract tmp/$1.tif tmp/$1 -psm 8 nobatch digits > tmp/debug_$1.txt
"$2"=$(head -n1 tmp/$1.txt | tr -d ' ' | tr -d '-' | tr -d '.')
}
你可以看到我试图为$2
分配一些用于其他功能的值:
function ReadScore #geo imgname varoutput sleeptime
{
sleep $4
Crop $1 $2
MakeReadible $2
RecognizeNumber $2 $3
echo "$3=$$3"
}
我再次尝试相同:echo "$3=$$3"
,最可怕的部分是$$3
,我刚刚写了,但是t test it (as think it will be value of var with name
$ 3`)。
在代码中,我将此函数称为:
ReadScore 135x35+110+130 score SCORE_LIM 1
另一个问题总是显示终端中的输出我试图用> tmp/debug_$1.txt
来做,但无论如何它都会出现。
我想我做错了。 :D请求帮助我!
答案 0 :(得分:0)
使用printf
;它比使用eval
更安全,这可能会导致正在执行的值出现意外代码。
function RecognizeNumber #imagename varoutput
{
tesseract tmp/$1.tif tmp/$1 -psm 8 nobatch digits > tmp/debug_$1.txt
printf -v "$2" "$(head -n1 tmp/$1.txt | tr -d ' .-')"
}
此外,您可以在不使用外部命令的情况下获取和修改值(并始终引用参数扩展):
RecognizeNumber () {
tesseract tmp/"$1".tif tmp/"$1" -psm8 nobatch digits > tmp/debug_"$1".txt
read -r value < tmp/"$1".txt
printf -v "$2" "${value//[ .-]}"
}
间接参数扩展${!name}
是安全的。
function ReadScore #geo imgname varoutput sleeptime
{
sleep "$4"
Crop "$1" "$2"
MakeReadible "$2"
RecognizeNumber "$2" "$3"
echo "$3=${!3}"
}
答案 1 :(得分:-1)
我在eval
命令和${!variable}
构建中找到了解决方案:
function RecognizeNumber #imagename varoutput
{
tesseract tmp/$1.tif tmp/$1 -psm 8 nobatch digits > tmp/debug_$1.txt
eval $2=$(head -n1 tmp/$1.txt | tr -d ' ' | tr -d '-' | tr -d '.')
}
function ReadScore #geo imgname varoutput sleeptime
{
sleep $4
Crop $1 $2
MakeReadible $2
RecognizeNumber $2 $3
echo "$3=${!3}"
}