1

我有一个运行一些作业的 bash 脚本。有时我希望能够运行这些作业nice以降低它们在服务器上的优先级。

例如,如果我的可执行文件是a.out,我可以从终端运行nice a.out以降低作业优先级。

在我的 bash 脚本中,我有一个变量NICE. 我做以下两件事之一:

# either nice is set
NICE="nice"

# or it is left unset
NICE=""

然后我使用

"$NICE$ ./a.out

稍后在脚本中。

这在设置为NICE="nice"时有效,但在设置为时无效。NICENICE=""

解决此问题的一种方法是使用 if 语句:

if [ "$NICE" == "nice" ]
then
    nice ./a.out
else
    ./a.out
fi

但这变成了 5 或 6 行代码,而不仅仅是一行。

是否有可能完成我尝试NICE用作变量以启动可执行文件的功能?

4

1 回答 1

2

你的第一个猜测几乎是正确的。

从 Bash 手册页(强调我的):

显式空参数(“”或“”)被保留并作为空字符串传递给命令。不带引号的隐式空参数由没有值的参数的扩展产生,被删除。 如果在双引号中扩展了没有值的参数,则会产生空参数并保留并作为空字符串传递给命令。 当引用的空参数作为扩展为非空的单词的一部分出现时,将删除空参数。也就是说,单词 -d'' 在分词和删除空参数后变为 -d。

因此,对于您的情况,您可以简单地删除引号:

$NICE ./a.out

这取决于 的值$NICE,将扩展为以下两个字命令:

'nice' './a.out'

或一个单词的命令:

'./a.out'

您可以使用它set -x来帮助调试这种扩展——它会打印扩展的单词列表,以便您查看是否有问题。

于 2016-11-08T10:52:58.243 回答