从文件名中提取变量名
Extracting variable name from filename
我有一个 bash 文件:
agro_233_720
在这个 bash 脚本中,我想将其名称中下划线分隔的部分用作变量:
name= agro
ip= 233
resolution= 720
我怎样才能得到它们?
我试着写:
name=`basename "[=12=]"`
但它输出孔名 (agro_233_720)
谢谢!
name=$(basename [=10=] | cut -d_ -f1)
ip=$(basename [=10=] | cut -d_ -f2)
resolution=$(basename [=10=] | cut -d_ -f3)
cut
围绕 -d
和 returns 提供的分隔符拆分其输入 -f
.
指定的索引处的字段
请参阅 ,了解无需使用外部程序即可一次提取 3 个变量的更高效解决方案。
与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 分隔符上拆分字符串并将值分配给变量。
与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
将包含脚本名称。
我有一个 bash 文件:
agro_233_720
在这个 bash 脚本中,我想将其名称中下划线分隔的部分用作变量:
name= agro
ip= 233
resolution= 720
我怎样才能得到它们?
我试着写:
name=`basename "[=12=]"`
但它输出孔名 (agro_233_720)
谢谢!
name=$(basename [=10=] | cut -d_ -f1)
ip=$(basename [=10=] | cut -d_ -f2)
resolution=$(basename [=10=] | cut -d_ -f3)
cut
围绕 -d
和 returns 提供的分隔符拆分其输入 -f
.
请参阅
与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 分隔符上拆分字符串并将值分配给变量。
与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
将包含脚本名称。