参数传递走样?

sh/bash/dash/ksh/zsh等Shell脚本
头像
daf3707
论坛版主
帖子: 12673
注册时间: 2007-06-13 15:57
来自: 在他乡
送出感谢: 49 次
接收感谢: 85 次

参数传递走样?

#1

帖子 daf3707 » 2009-03-24 16:17

没事来看看
假如目录里有aa、ab、ac
运行带"a*"参数的脚本

代码: 全选

 ./diy a*
变量$1变成了aa
我本来要在脚本里接收这个"a*"的,现在变了。 :em06
如果目录里没有aa、ab、ac,参数就会被正确传递为"a*"
如何做,才能在即有匹配文件名的同时,又可正确传递这个参数呢。

等你啊 :em11
上次由 daf3707 在 2009-03-24 17:05,总共编辑 1 次。
头像
greco
帖子: 2487
注册时间: 2007-04-06 10:24
来自: ~/Shanghai
送出感谢: 0
接收感谢: 0

Re: 参数传递走样?

#2

帖子 greco » 2009-03-24 16:44

好问题啊,以前都没有用通配符做过参数
1.JPG
http://silenceisdefeat.com/~greco

代码: 全选

''.join([chr(ord(c)-2) for c in 'O{"G/ockn"ku<"itgeq0ujkBiockn0eqo'])
echo -n "Z3JlY28uc2hpQGdtYWlsLmNvbQ==" | base64 -d
头像
greco
帖子: 2487
注册时间: 2007-04-06 10:24
来自: ~/Shanghai
送出感谢: 0
接收感谢: 0

Re: 参数传递走样?

#3

帖子 greco » 2009-03-24 16:49

不过传带 * 的参数还是蛮奇怪的

如果你要 x*

你就传 x就好了

*的通配到shell脚本里面去加咯
http://silenceisdefeat.com/~greco

代码: 全选

''.join([chr(ord(c)-2) for c in 'O{"G/ockn"ku<"itgeq0ujkBiockn0eqo'])
echo -n "Z3JlY28uc2hpQGdtYWlsLmNvbQ==" | base64 -d
头像
daf3707
论坛版主
帖子: 12673
注册时间: 2007-06-13 15:57
来自: 在他乡
送出感谢: 49 次
接收感谢: 85 次

Re: 参数传递走样?

#4

帖子 daf3707 » 2009-03-24 17:03

greco 写了:不过传带 * 的参数还是蛮奇怪的

如果你要 x*

你就传 x就好了

*的通配到shell脚本里面去加咯
问题是客户如果输了*呢?而恰好目录下有匹配的文件名,它这样一自动区配,那就搞不明白到底是输入了什么东东了。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

Re: 参数传递走样?

#5

帖子 BigSnake.NET » 2009-03-24 17:20

代码: 全选

./diy 'a*'
这样运行
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
daf3707
论坛版主
帖子: 12673
注册时间: 2007-06-13 15:57
来自: 在他乡
送出感谢: 49 次
接收感谢: 85 次

Re: 参数传递走样?

#6

帖子 daf3707 » 2009-03-24 17:21

BigSnake.NET 写了:

代码: 全选

./diy 'a*'
这样运行
我怕用户懒,不愿意输入'' :em06
大蛇都没办法了,看来只能折中了? :em06
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

Re: 参数传递走样?

#7

帖子 BigSnake.NET » 2009-03-24 17:25

daf3707 写了:
BigSnake.NET 写了:

代码: 全选

./diy 'a*'
这样运行
我怕用户懒,不愿意输入'' :em06
大蛇都没办法了,看来只能折中了? :em06
这种事情是 diy 无法控制的, 至少在 bash 下, * 的展开是由 shell 进行的, diy 根本连 ab ac ad 是不是由 a* 展开得到的都不知道.
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
daf3707
论坛版主
帖子: 12673
注册时间: 2007-06-13 15:57
来自: 在他乡
送出感谢: 49 次
接收感谢: 85 次

Re: 参数传递走样?

#8

帖子 daf3707 » 2009-03-24 17:28

嗯,应该是这样的了,那就判断加''没加吧,不加的提示help
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30
送出感谢: 2 次
接收感谢: 31 次

Re: 参数传递走样?

#9

帖子 aerofox » 2009-03-24 23:12

加上"后,"本身也不会传给diy。
在 bash 中可以控制,但不是在 diy 内部,在输入 ./diy a* 之前(比如在 ~/.bashrc中)执行过 set -o noglob 就不扩展了。
头像
daf3707
论坛版主
帖子: 12673
注册时间: 2007-06-13 15:57
来自: 在他乡
送出感谢: 49 次
接收感谢: 85 次

Re: 参数传递走样?

#10

帖子 daf3707 » 2009-03-25 9:01

aerofox 写了:加上"后,"本身也不会传给diy。
在 bash 中可以控制,但不是在 diy 内部,在输入 ./diy a* 之前(比如在 ~/.bashrc中)执行过 set -o noglob 就不扩展了。
那它就整个的不扩展了,比如 ls ab*,即使有abc,他也提示 ab*找不到了, :em06
还是多谢 :em01
头像
yjcong
帖子: 2470
注册时间: 2006-02-28 3:11
送出感谢: 0
接收感谢: 0

Re: 参数传递走样?

#11

帖子 yjcong » 2009-03-25 9:47

为什么不把$1 换成$@ ???????????
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

Re: 参数传递走样?

#12

帖子 BigSnake.NET » 2009-03-25 9:49

daf3707 写了:
aerofox 写了:加上"后,"本身也不会传给diy。
在 bash 中可以控制,但不是在 diy 内部,在输入 ./diy a* 之前(比如在 ~/.bashrc中)执行过 set -o noglob 就不扩展了。
那它就整个的不扩展了,比如 ls ab*,即使有abc,他也提示 ab*找不到了, :em06
还是多谢 :em01

扩展了又说走样, 不扩展又说不扩展 =.= ..
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
bones7456
论坛版主
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
送出感谢: 0
接收感谢: 8 次
联系:

Re: 参数传递走样?

#13

帖子 bones7456 » 2009-03-25 9:50

:em04
关注我的blog: ε==3
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

Re: 参数传递走样?

#14

帖子 eexpress » 2009-03-25 11:19

传的时候,就老实的带上‘’
虽然bash可以设置不扩展参数,可估计你不会喜欢的。
● 鸣学
头像
daf3707
论坛版主
帖子: 12673
注册时间: 2007-06-13 15:57
来自: 在他乡
送出感谢: 49 次
接收感谢: 85 次

Re: 参数传递走样?

#15

帖子 daf3707 » 2009-03-25 11:39

不扩展确实不习惯 :em06 用$@比较接近了 :em03
回复

回到 “Shell脚本”