我写了一个小脚本,遇到了点问题。
比如,我写了一个名字为~/bin/myscript的脚本,形式如下;
#! /bin/bash
for img in `ls *.{$1}`; do
echo converting "$img"
done
在使用的时候,我想用
$ myscript gif,png
就能像直接键入 ls *.{gif,png}一样,将本目录下,符号后缀规则的文件挑选出来。结果,发现,bash直接就将传入的命令给替换掉``中的$1了。
然后,提示:
ls: 无法访问*.{gif,png}: 没有那个文件或目录
各位,有啥好方法没有,可以避开这个问题?
bash的延迟替换命令行
-
- 帖子: 403
- 注册时间: 2007-10-27 1:04
- 枫叶饭团
- 帖子: 14683
- 注册时间: 2010-06-16 1:05
- 系统: Mac OS X
- 来自: Tencent
- 联系:
Re: bash的延迟替换命令行
搞了半天我也搞不出来,然后就写成这样子了.用空格分割参数,我用IFS=','参数前面好像始终有个空格导致失败。不懂
[bash]
#!/bin/bash
n=0
y=$#
until [ $n -eq $y ] ; do
ls *.$1
shift
$((n++))
done
exit 0
[/bash]
[bash]
#!/bin/bash
n=0
y=$#
until [ $n -eq $y ] ; do
ls *.$1
shift
$((n++))
done
exit 0
[/bash]
-
- 帖子: 403
- 注册时间: 2007-10-27 1:04
Re: bash的延迟替换命令行
感谢饭团了——怎么感觉你和饭盒是一家人啊?玩笑了。
不过,你的代码,不怎么合适阿!
我的本意,就是将可能个的参数给揉中一起,你这样,我反而的将参数拆开。
那换一个问题,bash下,如何拆分参数,就好像,一般脚本语言的split一样?——我估计,又郁闷了——貌似bash不支持数组。
或者,如何构”造命令行“?
不过,你的代码,不怎么合适阿!
我的本意,就是将可能个的参数给揉中一起,你这样,我反而的将参数拆开。
那换一个问题,bash下,如何拆分参数,就好像,一般脚本语言的split一样?——我估计,又郁闷了——貌似bash不支持数组。
或者,如何构”造命令行“?
- 枫叶饭团
- 帖子: 14683
- 注册时间: 2010-06-16 1:05
- 系统: Mac OS X
- 来自: Tencent
- 联系:
Re: bash的延迟替换命令行
我纠结了半天确实不会。不过bash是支持数组的哦!构造命令行?创建命令?可以看path
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: bash的延迟替换命令行
while read i
do
echo $i
done <<<"$(eval ls *.{$1})"
do
echo $i
done <<<"$(eval ls *.{$1})"
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 403
- 注册时间: 2007-10-27 1:04
Re: bash的延迟替换命令行
fnan厉害。
你能我修改一下这个吗?
for img in $(eval *.{$1}) ; do
echo $img
done
为什么上面这样不行?
按我理解,$(eval *.{$1})这里已经延迟展开了啊!
你能我修改一下这个吗?
for img in $(eval *.{$1}) ; do
echo $img
done
为什么上面这样不行?
按我理解,$(eval *.{$1})这里已经延迟展开了啊!
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: bash的延迟替换命令行
eval是针对命令而非针对参数的。
这样也行: eval ls *.{$1}|while ..........
这样也行: eval ls *.{$1}|while ..........
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 6548
- 注册时间: 2008-10-31 22:12
- 系统: 践兔
- 联系:
Re: bash的延迟替换命令行
sarrow 写了:我写了一个小脚本,遇到了点问题。
比如,我写了一个名字为~/bin/myscript的脚本,形式如下;
#! /bin/bash
for img in `ls *.{$1}`; do
echo converting "$img"
done
在使用的时候,我想用
$ myscript gif,png
就能像直接键入 ls *.{gif,png}一样,将本目录下,符号后缀规则的文件挑选出来。结果,发现,bash直接就将传入的命令给替换掉``中的$1了。
然后,提示:
ls: 无法访问*.{gif,png}: 没有那个文件或目录
各位,有啥好方法没有,可以避开这个问题?
代码: 全选
eval echo '*.{'"$1"'}'
代码: 全选
] ls -ld //
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04