我正在嘗試比較 Windows 終端中的版本。它在 Git Bash 中運行良好,但在 Windows 終端中顯示亂碼和錯誤結果?
verlte() {
[ "$1" = "`echo -e "$1\n$2" | sort -V | head -n1`" ]
}
verlt() {
[ "$1" = "$2" ] && return 1 || verlte $1 $2
}
verlte 2.5.7 2.5.6 && echo "yes" || echo "no" # no
verlt 2.4.10 2.4.9 && echo "yes" || echo "no" # no
verlt 2.4.8 2.4.10 && echo "yes" || echo "no" # yes
verlte 2.5.6 2.5.6 && echo "yes" || echo "no" # yes
verlt 2.5.6 2.5.6 && echo "yes" || echo "no" # no
Windows 終端中的結果

結果在 Git Bash

uj5u.com熱心網友回復:
看來您正在比較版本。在 PowerShell 和 .NET 框架中已經[version]可以做到這一點:
PS C:\Users> [version]"2.5.7" -le [version]"2.5.6"
False
PS C:\Users> [version]"2.4.10" -lt [version]"2.4.9"
False
PS C:\Users> [version]::new(2, 4, 8) -lt [version]::new(2, 4, 10)
True
PS C:\Users> [version]"2.5.6" -le [version]"2.5.6"
True
PS C:\Users> [version]::new(2, 5, 6) -lt [version]::new(2, 5, 6)
False
有關詳細資訊,請參閱PowerShell 比較運算子
請注意,Windows Terminal 是一個終端,不能運行任何東西。與其他終端相同,如 conhost(舊 Windows 上的默認終端)、term、xterm、iterm、konsole... 運行命令的東西稱為shell,shell 必須連接到某個終端才能作業。所以說“在 Windows 終端中運行”幾乎沒有意義,因為錯誤來自 shell。您的命令是 bash 命令,因此很明顯,如果您在 Windows 終端中運行 bash,那么它將正常運行。目前尚不清楚您使用的是哪個外殼,但是
- 在 PowerShell
[ "$1" = "`echo -e "$1\n$2" | sort -V | head -n1`" ]中完全無法決議,因為在 PowerShell`中是轉義字符(這意味著您的命令不會終止),并且=,[/]在 PowerShell 中是運算子而不是 bash 中的普通字符 - 在 cmd
$中不是變數和引數替換的字符,`也沒有特殊含義,所以如果[.exe你的路徑中有 a ,那么 cmd 會將整個文字命令傳遞給[無法比較任何內容的命令
每個 shell 都有自己的語法,不要嘗試在另一個完全不同的 shell 上運行為 shell 撰寫的命令
uj5u.com熱心網友回復:
借用對包含正確版本號的串列進行排序,它參考了如何像 Windows 資源管理器一樣按檔案名排序?,這是我轉換為 PowerShell 語法的嘗試:
# compare two arbitrary version strings using natural sorting
# allows strings to contain non-numeric components
function verlte {
param(
[string]$v1,
[string]$v2
)
function ToNatural {
param( [string]$v )
[regex]::Replace($v, '\d ', { $args[0].Value.PadLeft(20) })
}
(ToNatural $v1) -le (ToNatural $v2)
}
function verlt {
param(
[string]$v1,
[string]$v2
)
if ($v1 -eq $v2) { return $false }
verlte $v1 $v2
}
verlte 2.5.7 2.5.6 # False
verlt 2.4.10 2.4.9 # False
verlt 2.4.8 2.4.10 # True
verlte 2.5.6 2.5.6 # True
verlt 2.5.6 2.5.6 # False
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/462225.html
上一篇:制作隨機SID生成器
