GOOS=$(echo $(uname -s) | tr'[:upper:]''[:lower:]') GOARCH=$(echo $(uname -m | sed s/aarch64/arm64/ | sed s/x86_64/amd64/ | sed s/armv7l/arm/ | sed s/i386/386/ | sed s/i686/386/) | tr'[:upper:]''[:lower:]')
GOARCH=$(echo $(uname -m | sed s/aarch64/arm64/ | sed s/x86_64/amd64/ | sed s/armv7l/arm/ | sed s/i386/386/ | sed s/i686/386/) | tr'[:upper:]''[:lower:]')
uname -m 输出机器硬件名,如 x86_64、aarch64、armv7l
sed s/aarch64/arm64/ 将 Linux/ARM64 的 aarch64 映射为 Go 的 arm64
sed s/x86_64/amd64/ 将 x86-64 映射为 Go 的 amd64
sed s/armv7l/arm/ 将 32 位 ARM 映射为 Go 的 arm
sed s/i386/386/、sed s/i686/386/ 将 32 位 x86 映射为 Go 的 386
tr '[:upper:]' '[:lower:]' 兜底转小写
macOS(Apple Silicon)上 uname -m 直接返回 arm64,第一条 aarch64 → arm64 不会触发,命令仍正确;该 sed 仅在 Linux ARM64(返回 aarch64)时起作用。
uname -m
GOARCH
x86_64
amd64
aarch64
arm64
armv7l
arm
i386
386
i686
386
实际用途
下载 Go 二进制包
1 2 3
GOOS=$(uname -s | tr'[:upper:]''[:lower:]') GOARCH=$(uname -m | sed s/aarch64/arm64/ | sed s/x86_64/amd64/) curl -fLO "https://go.dev/dl/go1.22.4.${GOOS}-${GOARCH}.tar.gz"