首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

请教怎么将[ab]原封不动的传给Shell脚本

2012-06-12 
请问如何将[ab]原封不动的传给Shell脚本?这样一个叫s.sh的脚本:#! /bin/kshecho $1怎样才能让它的输出结果

请问如何将[ab]原封不动的传给Shell脚本?
这样一个叫s.sh的脚本:
#! /bin/ksh 
echo $1
怎样才能让它的输出结果为[ab]? 
试过了下面这些都不行:
./s.sh [ab]
./s.sh \[ab]
./s.sh '[ab]'
./s.sh '\[ab]'
结果不是a就是\[ab]。

求高手指点!

[解决办法]
./s.sh "[ab]"

记住,shell解析命令前将转义一次""或者不带""的部分, 将不转义''包裹的部分,另外,[]这些符号影响命令解析,必须"",''包裹,具体转义问题自己考虑。


[解决办法]
你确定? 

我bashshell没这个毛病,通配符和正则都是程序解析的,不是shell解析的。
[解决办法]
LZ估计是solaris系统,用了ksh,跟bash有点不一样
多试试转义之类的方法吧
[解决办法]
\[ab\]
[解决办法]
centos用/bin/bash,毫无问题啊,我不试验一下是不会回复你的。

C/C++ code
[User:root Time:18:43:13 Path:/home/liangdong/shell]$ cat test.sh #!/bin/sh echo $1;[User:root Time:18:43:15 Path:/home/liangdong/shell]$ ./test.sh [ab][ab][User:root Time:18:43:19 Path:/home/liangdong/shell]$
[解决办法]
$ cat cmd.ksh
#!/bin/ksh

print $1;
$ ./cmd.ksh "[ab]"
[ab]


[解决办法]
貌似所有情况都行啊:

Perl code
zhu@ubuntu:~/sed$ cat cmd.ksh #!/bin/kshecho $1;zhu@ubuntu:~/sed$ ./cmd.ksh [ab][ab]zhu@ubuntu:~/sed$ ./cmd.ksh '[ab]'[ab]zhu@ubuntu:~/sed$ ./cmd.ksh "[ab]"[ab]zhu@ubuntu:~/sed$ uname -aLinux ubuntu 3.2.0-24-generic #39-Ubuntu SMP Mon May 21 16:52:17 UTC 2012 x86_64 x86_64 x86_64 GNU/Linuxzhu@ubuntu:~/sed$ dpkg -l|grep kshii  ksh                                    93u-1                                   The real, AT&T version of the Korn shellzhu@ubuntu:~/sed$
[解决办法]
探讨

重新看了下书,关于执行顺序的部分,有这么一段:
“9.对于*、?,以及一对[...]的任何出现次数,都执行文件名生成(filename generation)的操作,也就是通配符展开。”

终于知道为什么结果是a了,因为我的当前目录下恰好有个叫a的文件。删了之后,./sh [ab]就能得到想要的结果。
引用的那段应该是跟shell的具体种类无关的。楼上可以在当前目录下建个叫a或者b的文件……

[解决办法]
虽然你执行时参数使用了引号,但是你脚本中的输出语句是echo $1,其中的$1是没有引号的

你可以改为这样看看
echo "$1"

这样,./s.sh '[ab]'
就会输出[ab]了

不管你当前目录下有没有a或b文件

热点排行