我有一个bash文件:
agro_233_720
在这个bash脚本中,我想用它作为变量,它的名称是下划线的部分:
name= agro
ip= 233
resolution= 720
我怎样才能得到它们?
我试着写:
name=`basename "$0"`
但输出孔名称(agro_233_720)
谢谢!
答案 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
将包含脚本名称。