从文件名

时间:2016-03-15 13:23:56

标签: bash awk grep tcl

我有一个bash文件:

agro_233_720

在这个bash脚本中,我想用它作为变量,它的名称是下划线的部分:

name= agro
ip= 233
resolution= 720

我怎样才能得到它们?

我试着写:

name=`basename "$0"`

但输出孔名称(agro_233_720)

谢谢!

3 个答案:

答案 0 :(得分:3)

使用Imports System.CodeDom.Compiler Imports Microsoft.CodeAnalysis Imports Microsoft.CodeAnalysis.VisualBasic Imports Microsoft.VisualBasic.CompilerServices Module Module1 Sub Main() Dim code = "Module Module1" + Environment.NewLine + "Sub Main()" + Environment.NewLine + "System.Console.WriteLine(My.Application.Info.AssemblyName)" + Environment.NewLine + "End Sub" + Environment.NewLine + "End Module" Dim tree = VisualBasicSyntaxTree.ParseText(code) Dim compilation = VisualBasicCompilation.Create("test"). AddSyntaxTrees(tree). AddReferences(MetadataReference.CreateFromFile(GetType(Object).Assembly.Location)). ' mscorlib AddReferences(MetadataReference.CreateFromFile(GetType(GeneratedCodeAttribute).Assembly.Location)). ' System AddReferences(MetadataReference.CreateFromFile(GetType(StandardModuleAttribute).Assembly.Location)). ' Microsoft.VisualBasic WithOptions(New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithParseOptions( VisualBasicParseOptions.Default.WithPreprocessorSymbols(New KeyValuePair(Of String, Object)("_MYTYPE", "Console")))) Dim emitResult = compilation.Emit("test.exe") If Not emitResult.Success Then Console.WriteLine(String.Join(Environment.NewLine, emitResult.Diagnostics)) End If End Sub End Module

read

它将字符串拆分为IFS分隔符,并将值分配给变量。

答案 1 :(得分:2)

name=$(basename $0 | cut -d_ -f1)
ip=$(basename $0 | cut -d_ -f2)
resolution=$(basename $0 | cut -d_ -f3)

cut将其输入拆分为-d提供的分隔符,并返回-f指定的索引处的字段。

有关在不使用外部程序的情况下一次提取3个变量的更有效解决方案,请参阅SLePort's answer

答案 2 :(得分:2)

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