将命令放入变量时 Bash 脚本失败

将命令放入变量时 Bash 脚本失败

我尝试在我的 Linux ubuntu 13.04 上的 bash 脚本中使用 ghostscript。

当直接在控制台或脚本中写入相同的命令可以完美运行时,我在变量中写入 ghostscript 命令时遇到问题。

我不知道如何解决这个问题。

你可以帮帮我吗 ?

例子 :

我的脚本:

#!/bin/bash
# Script PDF_test_ghs.sh

echo "Direct test :"
gs -o PDF_temp_01.pdf -sDEVICE=pdfwrite -g7000x5600 -c "<</PageOffset [360 380]>> setpagedevice" -f PDF_initial.pdf

echo ""
echo "Test with variable :"
command='gs -o PDF_temp_02.pdf -sDEVICE=pdfwrite -g7000x5600 -c "<</PageOffset [360 380]>> setpagedevice" -f PDF_initial.pdf'
$command
exit 0;

结果是:

ubuntu@ubun:~$ PDF_test_ghs.sh 
Direct test :
GPL Ghostscript 9.07 (2013-02-14)
Copyright (C) 2012 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 3.
Page 1
Page 2
Page 3

Test with variable :
GPL Ghostscript 9.07 (2013-02-14)
Copyright (C) 2012 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Error: /undefined in "
Operand stack:

Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--
Dictionary stack:
   --dict:1167/1684(ro)(G)--   --dict:0/20(G)--   --dict:77/200(L)--
Current allocation mode is local
GPL Ghostscript 9.07: Unrecoverable error, exit code 1
ubuntu@ubun:~$

第一个有效,第二个无效。我想使用第二个。为什么它无效?

答案1

您的语句失败,因为命令中的双引号是文字引号,而不是语法引号。当您运行 时$command,shell 会解释每个空格分隔的部分作为一个论据, 和你的

"<</PageOffset [360 380]>> setpagedevice"

不再被双引号“粘”在一起。

作为一个简单的例子,尝试:

command='touch "foo bar"'
$command

您希望foo bar创建一个名为的文件,但得到的却是"foobar"。您可以尝试以下方法:

eval $command

在这里,命令将被评估,就像在 shell 中输入一样。但不要指望这总是有效。


你应该阅读: 我试图将命令放入变量中,但复杂的情况总是失败!— 绝不建议将命令存储在变量中。变量保存的是数据,而不是命令。如果要重复运行命令,则应使用 shell 函数。

相关内容