echo $1 = 不带引号的空格字符串?

echo $1 = 不带引号的空格字符串?

脚本:

#!/bin/sh
echo $1

我想向它发送一个变量但不带引号。

例子:

 ./script 1 2 3

以上将不是工作(打印1 2 3
因为1 2 3不在引号内。

我不想使用引号。
因为输入引号需要额外的时间。

是吗可能的

答案1

您可以将脚本更改为

#!/bin/sh
echo "$*"

"$*"扩展为单个字符串,其中包含传递给该字符串的所有参数,并在每个参数之间用空格连接。因此

$ ./script 1 2 3
1 2 3

但这并没有从字面上传递命令行上脚本名称后面的任何内容。那是不可能的。例如,多个空格被挤压在一起,因为它们只是分隔参数:

$ ./script 1  2 3
1 2 3

Shell 特殊字符仍然得到扩展。

$ ./script 2 * 2
2 bin dev etc home lib lost+found proc run sbin tmp sys usr var 2
$ ./script hello ; world
hello
bash: world: command not found

您不能使用它来将变量传递给不带引号的脚本,因为它的作用是首先在空格处分割变量的值,然后展开与至少一个文件名匹配的通配符,最后连接结果。

$ foo='2  *  2'
$ ./script $foo
2 bin dev etc home lib lost+found proc run sbin tmp sys usr var 2

答案2

这个脚本:

#!/bin/sh
echo $@

产生:

$ ./test.sh 1 23 4 5 6
$ 1 23 4 5 6

相关内容