linux – Bash脚本:不使用$@或$*扩展参数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – Bash脚本:不使用$@或$*扩展参数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1460字,纯文字阅读大概需要3分钟。
内容图文
使用$@,您可以对bash中的文件列表执行操作.例:
script.sh:
#!/bin/bash
list=$@
for file in $list; do _commands_; done
然后我可以用这个程序调用
~/path/to/./script dir1/{subdir1/*.dat,subdir2/*}
这个参数将扩展为许多成为$list的参数.但现在我想要其他参数,比如1美元,2美元,这个名单是3美元.所以我想在脚本中发生dir1 / {subdir1 / * .dat,subdir2 / *}的扩展,而不是成为很多参数.在命令行上,您可以执行以下操作:
find dir1/{subdir1/*.dat,subdir2/*}
并获得所需的输出,即文件列表.所以我尝试过这样的事情:
arg1=$1
arg2=$2
list=$(find $3)
for file in $list; do _commands_; done
...
电话:
~/path/to/./script arg_1 arg_2 'dir1/{subdir1/*.dat,subdir2/*}'
但没有成功.关于如何将此列表扩展为脚本内的变量的一些帮助将非常感激!:)
编辑:所以下面的答案给出了使用这些命令的解决方案:
arg1="$1"
arg2="$2"
shift 2
for f in "$@"; do echo "processing $f"; done;
但出于好奇,是否仍然可以将字符串dir1 / {subdir1 / * .dat,subdir2 / *}传递给脚本内的find命令(或任何指向同一端的方法),而不使用$@,并获取列表那样?这可能是有用的,例如如果最好让列表不是第一个或最后一个参数,或者在某些其他情况下,即使它需要转义字符或引用参数.
解决方法:
您可以在脚本中使用此代码:
arg1="$1"
arg2="$2"
shift 2
for f in "$@"; do echo "processing $f"; done;
然后将其称为:
~/path/to/script arg_1 arg_2 dir1/{subdir1/*.dat,subdir2/*}
使用shift 2将位置参数移动2个位置,从而使$3为$1,$4为$2等.然后您可以直接调用$@来迭代其余参数.
按照帮助班次:
shift: shift [n]
Shift positional parameters.
Rename the positional parameters $N+1,$N+2 ... to $1,$2 ... If N is
内容总结
以上是互联网集市为您收集整理的linux – Bash脚本:不使用$@或$*扩展参数全部内容,希望文章能够帮你解决linux – Bash脚本:不使用$@或$*扩展参数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。