我正在运行1.8.3并且我在shell脚本中有这个命令:
go build -gcflags='-N -l'
我的脚本中没有能够通过引用,双引号,转义引号等来解决这个问题。但是,如果在我的脚本中有这样的东西:
gc_flags="-gcflags='-N -l'"
echo go build "${gc_flags}"
go build "${gc_flags}"
但是如果我在控制台中复制并粘贴echo输出并运行它,它就可以正常工作。
这是我从我的脚本中得到的错误:
flag provided but not defined: -N -l
这里有任何帮助。 。 。我不记得以前曾经用过构建脚本遇到这样的问题。
答案 0 :(得分:4)
这里的问题是你在变量的值中嵌入了文字单引号。 使用此值时,shell将不会在以后评估这些嵌入的单引号。
运行时:
go build -gcflags='-N -l'
shell将go
命令作为命令行参数传递给build
命令:
-gcflags=-N -l
gc_flags="-gcflags='-N -l'"
go build "${gc_flags}"
运行时:
go
shell将build
命令作为命令行参数传递给-gcflags='-N -l'
命令:
'-N -l'
-N -l
在第一种情况下,单引号不是第二个参数的一部分,
因为shell使用不带引号的值gc_flags
替换单引号表达式-gcflags=
。
在第二种情况下,没有发生这种替换, 因为变量的内容包含单引号, 没有重新评估, 所以单引号仍然是第二个参数的一部分。
解决此问题的一种方法是仅在gc_flags='-N -l'
go build -gcflags="$gc_flags"
变量中存储标记,而不包含gc_flags
gc_flags='-N -l'
这会产生预期的效果,
因为此处gc_flags=(-gcflags='-N -l')
go build "${gc_flags[@]}"
的值不包含单引号,
在评估表达式-gcflags=-N -l
时会删除它们。
另一种方法是使用Bash数组:
time = Time.parse(@request.created_at)
last_day = time.end_of_month.day
@mid_month = time.strftime("%Y-%m-15 %H:%M:%S")
@end_month = time.strftime("%Y-%m-#{last_day} %H:%M:%S")
在这种形式下,
数组有一个值Sub CombilnedWorkBook_and_Sheets()
Dim J As Integer
Dim ws As Worksheet
Dim varFieldName As Variant
Dim lngLoop As Long
Dim rngFound As Range
Dim rngCopy As Range
Dim lngLastRow As Long
Dim lngLastRow1 As Long
Dim lngCol As Long
Dim wksTarget As Worksheet
Application.DisplayAlerts = False
Set wksTarget = ThisWorkbook.Worksheets("Consolidated")
varFieldName = Array("Patient Name", "DOB", "Admit_date", "Discharge_date", "Primary_DX_Code", "BPS PDF", "Consultation Doc", "Discharge Agreement", "EMF PDF", "Financial PDF", "ID & Insurance Card", "Lab Report PDF", "Legal History", "Medical Docs PDF", "Progress Notes PDF", "Pass Documentation", "Treatment Agreement", "Utilization Review", "User")
Path = Sheet1.Range("C9").Value
Filename = Dir(Path & "*.xlsx")
Do While Filename <> ""
Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
For Each Sheet In ActiveWorkbook.Sheets
Sheet.Copy After:=ThisWorkbook.Sheets(1)
Next Sheet
Workbooks(Filename).Close savechanges:=False
Filename = Dir()
Loop
wksTarget.Range("a1").CurrentRegion.Offset(1).ClearContents
For J = 2 To Sheets.Count
lngLastRow1 = wksTarget.Cells(wksTarget.Rows.Count, "A").End(xlUp).Row + 1
Sheets(J).Activate
For lngLoop = 0 To UBound(varFieldName)
Set rngFound = Range("A1").EntireRow.Find(varFieldName(lngLoop))
If Not rngFound Is Nothing Then
lngCol = rngFound.Column
lngLastRow = ActiveSheet.Cells(Rows.Count, lngCol).End(xlUp).Row
With ActiveSheet.Range("A1").CurrentRegion.Columns(lngCol)
Set rngCopy = .Offset(1).Resize(.Rows.Count - 1)
End With
rngCopy.Copy Destination:=wksTarget.Cells(lngLastRow1, lngLoop + 1)
Set rngFound = Nothing
Set rngCopy = Nothing
lngCol = 0
lngLastRow = 0
End If
Next lngLoop
Next
Sheets(1).Select
Columns("A:Z").Select
Selection.EntireColumn.AutoFit
Application.DisplayAlerts = False
For Each ws In Worksheets
If ws.Name <> "Consolidated" And ws.Name <> "Run Macro" Then ws.Delete
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = False
MsgBox "File has been coppied Successfully"
End Sub
,
在评估数组赋值时,已删除嵌入的单引号。
答案 1 :(得分:2)
您可以在bash脚本in this commit中看到GOGCFLAGS:
time go test std -short -timeout=$(expr 120 \* $timeout_scale)s -gcflags "$GO_GCFLAGS"
这意味着你only set the values in GO_GCFLAGS
。
GO_GCFLAGS="-N -l"
OP确认这是有效的:
gc=-gcflags gc_flags="-N -l" go build "${gc}" "${gc_flags}"