Bash - 在脚本中执行命令,将单引号添加到包含空格的变量中

时间:2016-08-08 10:38:33

标签: linux bash shell ubuntu

我正在编写一个脚本,执行所有必要的命令来训练一个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"是其他变量)。

使用此行运行脚本后,我收到一条通知,说明虽然在我执行该字体时效果很好,但字体仍然无法识别,并且#34;手动"在控制台中。 使用set -xset +x(脚本)行如下所示:text2image --text=contentTraint.txt --outputbase=gdfdd.DejaVuSansBold.exp0 '--font='\''DejaVu Sans Bold'\''' --fonts_dir=/usr/share/fonts。我不知道如何摆脱因为空格而增加的额外报价......

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

清楚要执行的命令。当您键入

var act = $("ul.nav > li:not(div.modal ul.nav > li)");

到shell,会发生的是shell调用带有4个参数的命令text2image --text=trainingFile.txt --outputbase=eng.DejaVuSansBold.exp0 \ --font='DejaVu Sans Bold' --fonts_dir=/usr/share/fonts text2image
--text=trainingFile.txt
--outputbase=eng.DejaVuSansBold.exp0--font=DejaVu Sans Bold

单引号的目的只是告诉shell --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

如果您更动态地构建命令,则可能需要执行其他操作。