脚本:
#!/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