【发布时间】:2011-07-08 20:17:56
【问题描述】:
这已经让我发疯了好几个小时了。
考虑一下 perl 中的以下测试脚本: (你好.pl)
#!/usr/bin/perl
print "----------------------------------\n";
$numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments:\n";
foreach $argnum (0 .. $#ARGV) {
print "$ARGV[$argnum]\n";
}
好的,它只是打印出给脚本的命令行参数。
例如:
$ ./hello.pl apple pie
----------------------------------
thanks, you gave me 2 command-line arguments:
apple
pie
我可以通过用双引号将单词括起来给脚本一个带空格的参数:
$ ./hello.pl "apple pie"
----------------------------------
thanks, you gave me 1 command-line arguments:
apple pie
现在我想在 shell 脚本中使用这个脚本。我已经像这样设置了 shell 脚本:
#!/bin/bash
PARAM="apple pie"
COMMAND="./hello.pl \"$PARAM\""
echo "(command is $COMMAND)"
$COMMAND
我使用相同的参数和转义引号调用 hello.pl。 该脚本返回:
$ ./test.sh
(command is ./hello.pl "apple pie")
----------------------------------
thanks, you gave me 2 command-line arguments:
"apple
pie"
尽管 $COMMAND 变量回显命令的方式与我第二次从命令行运行 perl 脚本的方式完全一样,但这一次它不想将苹果派视为单个参数。
为什么不呢?
【问题讨论】: