【问题标题】: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)

谢谢!

【问题讨论】:

    标签: bash awk grep tcl


    【解决方案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 将包含脚本名称。

      【讨论】:

        猜你喜欢
        • 2011-09-13
        • 2011-09-14
        • 1970-01-01
        • 1970-01-01
        • 2019-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多