从文件名中提取变量名[重复]

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 将包含脚本名称。

【讨论】:

以上是关于从文件名中提取变量名[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从文件名中获取扩展名,如变量[重复]

从路径中提取目录[重复]

活用变量字符串${var%%.*}

提取目录路径和文件名

如何使用jquery从url中提取主机名[重复]

提取文件名和目录名的一些方法