如何获取使用 bash 标记的变量的值

How to grab the value of a variable that is tabbed using bash

我有一个名为 ver.go 的 golang 文件,由 1 个变量组成。

const (
    ver = "1.1.1"
)

我希望能够使用 bash 命令输出 1.1.1。如果我们去掉开头的选项卡和像这样的 spaces

,我可以毫无问题地做到这一点
const (
ver="1.1.1"
)

通过使用此命令 awk -F= '/^ver=/{print }' ver.go | sed -e 's/^"//' -e 's/"$//'

但是,由于它必须使用 gofmt 正确格式化,所以我似乎无法用其中的选项卡以及等号 [=15= 之后的 space 弄清楚]

感谢任何帮助。

你可以使用这个 awk:

awk -F= ' ~ /^[[:blank:]]*ver/{gsub(/["[:blank:]]+/, ""); print }' file
1.1.1

如果您只想从文件 ver.go 中获取 "1.1.1",一个简单的解决方案是让 sed 为您完成工作。您可以使用带有单个反向引用的普通替换形式来捕获 "1.1.1" 并将其重新插入作为整行的替换。您可以使用 sed -n 来抑制正常 pattern-space 的输出并在替换后添加 p 以便在成功替换后只有与您的 REGEX 匹配的行打印出来,例如

sed -n 's/^[[:space:]]*ver[[:space:]]*=[[:space:]]*"\([^"][^"]*\).*$//p' ver.go

无论有没有 "ver" 之前的空格(或制表符),这都适用。

例子Use/Output

根据您的 ver.go 内容,您将获得:

$ sed -n 's/^[[:space:]]*ver[[:space:]]*=[[:space:]]*"\([^"][^"]*\).*$//p' ver.go
1.1.1

如果我误解了你的意思,请告诉我。如果您还有其他问题,请在下方发表评论。

使用 bash 和参数扩展删除所有 ":

while read -r key x value; do [[ "$key" == "ver" ]] && echo "${value//\"/}"; done < ver.go

输出:

1.1.1