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

标签 linux bash shell ubuntu

我正在编写一个脚本来执行所有必要的命令来训练超正方体语言,我想接收一个字体作为参数(例如: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 -xset +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

对于 shell,发生的事情是 shell 使用 4 个参数调用命令 text2image: --text=trainingFile.txt,
--outputbase=eng.DejaVuSansBold.exp0,
--font=DejaVu Sans Bold, --fonts_dir=/usr/share/fonts

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

如果您要更加动态地构建命令,您可能需要做一些其他的事情。

关于linux - Bash - 在脚本中执行命令,将单引号添加到包含空格的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38827067/

相关文章:

java - 命令是否从 shell 脚本中的当前目录运行?

json - 与字符串键混合的 pretty-print 有效 JSON

git - 我可以将本地仓库推送到两个远程仓库吗?

bash - 用于检查 glob 模式是否与任何文件匹配的 shell 脚本

linux - 基于 GTK 的窗口的 X 客户端请求失败

linux - 主机名中的 ssl 错误

linux - Linux 3.19 中的 CPU 亲和性

python - 覆盖 python setuptools 中的 shebang mangling

linux - zsh 脚本 [进程完成] 没有返回到 shell

linux - 使用 Wget 获取长 URL