![](/img/trans.png)
[英]How to pass a variable containing quotes and spaces as part of a single argument to a command
[英]Bash - Executing a command in a script adding single quotes to a variable containing spaces
我正在编写一个脚本,该脚本执行所有必要的命令以训练tesseract语言,并且我想接收字体作为参数(例如:DejaVu Sans Bold)并执行此命令text2image --text=trainingFile.txt --outputbase=eng.DejaVuSansBold.exp0 --font='DejaVu Sans Bold' --fonts_dir=/usr/share/fonts
。 注意--font='DejaVu Sans Bold'
的字体名称用单引号引起来。 由于我将字体作为参数接收,因此需要添加引号并使用名称。
经过一些不同的方法之后,我的“最有效”尝试是text2image --text="${trainingTextFileName}" --outputbase="${languageCode}"."${fontNameWithoutBlanks}".exp0 --font="'""${fontName}""'" --fonts_dir=/usr/share/fonts
但是仍然无法使用...(“ languageCode”和“ fontNameWithoutBlanks”是其他变量)。
使用此行运行脚本后,我收到一条通知,指出该字体不能识别,尽管当我在控制台中“手动”执行该字体时效果很好。 使用set -x
和set +x
行(脚本的行)如下所示: text2image --text=contentTraint.txt --outputbase=gdfdd.DejaVuSansBold.exp0 '--font='\\''DejaVu Sans Bold'\\''' --fonts_dir=/usr/share/fonts
。 我不知道如何摆脱由于空格而增加的额外报价...
有人可以帮我吗?
明确要执行的命令。 当您键入
text2image --text=trainingFile.txt --outputbase=eng.DejaVuSansBold.exp0 \
--font='DejaVu Sans Bold' --fonts_dir=/usr/share/fonts
到外壳程序,发生的事情是外壳text2image
使用以下四个参数调用命令text2image
:-- text2image
--text=trainingFile.txt
,
--outputbase=eng.DejaVuSansBold.exp0
,
--font=DejaVu Sans Bold
,-- --fonts_dir=/usr/share/fonts
。
单引号的目的只是告诉外壳程序--font=DejaVu Sans Bold
只是一个参数。 但是,为了回答您的问题,我们确实需要知道您如何执行该命令(即,您需要显示一些代码)。 如果变量$font
有字体名称,则可以执行以下操作:
text2image --text=trainingFile.txt --outputbase=eng.DejaVuSansBold.exp0 \
--font="$font" --fonts_dir=/usr/share/fonts
如果将字体作为参数传递给脚本,则可以执行以下操作:
font=$1
text2image ... --font="$1" ...
如果要更动态地构建命令,则可能需要执行其他操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.