当前位置: 技术问答>linux和unix
请问如何将[ab]原封不动的传给Shell脚本?
来源: 互联网 发布时间:2017-02-27
本文导语: 这样一个叫s.sh的脚本: #! /bin/ksh echo $1 怎样才能让它的输出结果为[ab]? 试过了下面这些都不行: ./s.sh [ab] ./s.sh [ab] ./s.sh '[ab]' ./s.sh '[ab]' 结果不是a就是[ab]。 求高手指点! | 貌似所有...
这样一个叫s.sh的脚本:
#! /bin/ksh
echo $1
怎样才能让它的输出结果为[ab]?
试过了下面这些都不行:
./s.sh [ab]
./s.sh [ab]
./s.sh '[ab]'
./s.sh '[ab]'
结果不是a就是[ab]。
求高手指点!
#! /bin/ksh
echo $1
怎样才能让它的输出结果为[ab]?
试过了下面这些都不行:
./s.sh [ab]
./s.sh [ab]
./s.sh '[ab]'
./s.sh '[ab]'
结果不是a就是[ab]。
求高手指点!
|
貌似所有情况都行啊:
zhu@ubuntu:~/sed$ cat cmd.ksh
#!/bin/ksh
echo $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 -a
Linux ubuntu 3.2.0-24-generic #39-Ubuntu SMP Mon May 21 16:52:17 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
zhu@ubuntu:~/sed$ dpkg -l|grep ksh
ii ksh 93u-1 The real, AT&T version of the Korn shell
zhu@ubuntu:~/sed$
|
虽然你执行时参数使用了引号,但是你脚本中的输出语句是echo $1,其中的$1是没有引号的
你可以改为这样看看
echo "$1"
这样,./s.sh '[ab]'
就会输出[ab]了
不管你当前目录下有没有a或b文件
你可以改为这样看看
echo "$1"
这样,./s.sh '[ab]'
就会输出[ab]了
不管你当前目录下有没有a或b文件
|
./s.sh "[ab]"
记住,shell解析命令前将转义一次""或者不带""的部分, 将不转义''包裹的部分,另外,[]这些符号影响命令解析,必须"",''包裹,具体转义问题自己考虑。
记住,shell解析命令前将转义一次""或者不带""的部分, 将不转义''包裹的部分,另外,[]这些符号影响命令解析,必须"",''包裹,具体转义问题自己考虑。
|
你确定?
我bashshell没这个毛病,通配符和正则都是程序解析的,不是shell解析的。
我bashshell没这个毛病,通配符和正则都是程序解析的,不是shell解析的。
|
LZ估计是solaris系统,用了ksh,跟bash有点不一样
多试试转义之类的方法吧
多试试转义之类的方法吧
|
[ab]
|
centos用/bin/bash,毫无问题啊,我不试验一下是不会回复你的。
至于你为什么:#! /bin/ksh
我就不知道了,我都是用bash的
[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]$
至于你为什么:#! /bin/ksh
我就不知道了,我都是用bash的
|
$ cat cmd.ksh
#!/bin/ksh
print $1;
$ ./cmd.ksh "[ab]"
[ab]
$
#!/bin/ksh
print $1;
$ ./cmd.ksh "[ab]"
[ab]
$
|
[]也是通配符啊,还真是乱了,谢谢楼主分享。