从文件名中提取变量名[重复]
Posted
技术标签:
【中文标题】从文件名中提取变量名[重复]【英文标题】:Extracting variable name from filename [duplicate] 【发布时间】:2016-06-30 23:17:38 【问题描述】:我有一个 bash 文件:
agro_233_720
在这个 bash 脚本中,我想将其名称中下划线分隔的部分用作变量:
name= agro
ip= 233
resolution= 720
我怎样才能得到它们?
我试着写:
name=`basename "$0"`
但它会输出孔名 (agro_233_720)
谢谢!
【问题讨论】:
【参考方案1】:name=$(basename $0 | cut -d_ -f1)
ip=$(basename $0 | cut -d_ -f2)
resolution=$(basename $0 | cut -d_ -f3)
cut
将其输入拆分为-d
提供的分隔符,并返回-f
指定的索引处的字段。
请参阅SLePort's answer 以获得更有效的解决方案,无需使用外部程序即可一次提取 3 个变量。
【讨论】:
这可行,但不推荐使用,因为使用多个外部程序的效率非常低。【参考方案2】:read
:
$ IFS='_' read name ip resolution <<< "agro_233_720"
$ printf 'name: %s\nip: %s\nresolution: %s\n' "$name" "$ip" "$resolution"
name: agro
ip: 233
resolution: 720
它在 IFS 分隔符上拆分字符串并将值分配给 vars。
【讨论】:
【参考方案3】:用Tcl
可以写成如下,
lassign [ split $argv0 _] name ip resolution
如果您的 Tcl 版本低于 8.5,则使用lindex
提取信息。
set input [split $argv0 _]
set name [lindex $input 0]
set ip [lindex $input 1]
set resolution [lindex $input 2]
变量argv0
将包含脚本名称。
【讨论】:
以上是关于从文件名中提取变量名[重复]的主要内容,如果未能解决你的问题,请参考以下文章