14

假设我有一个名为foo.sh的 Bash 脚本。

我想这样称呼它:

foo.sh Here is a bunch of stuff on the command-line

我希望它将所有文本存储到一个变量中并打印出来。

所以我的输出是:

Here is a bunch of stuff on the command-line

我该怎么做?

4

3 回答 3

29

如果您想避免涉及 $IFS,请使用 $@ (或不要将 $* 括在引号中)

$ cat atsplat
IFS="_"
echo "     at: $@"
echo "  splat: $*"
echo "noquote: "$*

$ ./atsplat this is a test
     at: this is a test
  splat: this_is_a_test
noquote: this is a test

IFS 行为也遵循变量赋值。

$ cat atsplat2
IFS="_"
atvar=$@
splatvar=$*
echo "     at: $atvar"
echo "  splat: $splatvar"
echo "noquote: "$splatvar

$ ./atsplat2 this is a test
     at: this is a test
  splat: this_is_a_test
noquote: this is a test

请注意,如果对 $IFS 的分配是在分配 $splatvar 之后进行的,那么所有输出都将相同($IFS 在“atsplat2”示例中无效)。

于 2009-05-09T00:00:13.530 回答
27
echo "$*"

会做你想做的事,即打印出整个命令行参数,用空格分隔(或者,从技术上讲,无论是什么值$IFS)。如果你想将它存储到一个变量中,你可以这样做

thevar="$*"

如果这不能很好地回答你的问题,我不知道还能说什么......

于 2009-05-08T20:37:35.077 回答
0

看看$*变量。它将所有命令行参数合二为一。

echo "$*"

这应该做你想要的。

更多信息在这里。

于 2009-05-08T20:38:48.163 回答