我在 Bash 中编写了以下代码:
#!/bin/sh
host=$1
regex="^(((git|ssh|http(s)?)|(git@[\w\.]+))(:(\/\/)?)([A-Za-z0-9.@:_/-]+)\.com)(.*)"
if [[ "$host" =~ $regex ]]; then
d=${BASH_REMATCH[1]}
if [[ "$d" = *github* ]]; then
return
fi
fi
die "Current repository is not stored in Github."
我想学习如何编写更好的 Bash 代码,所以我使用了 shellcheck.net。
Line 5:
if [[ "$host" =~ $regex ]]; then
^-- SC2039: In POSIX sh, [[ ]] is undefined.
Line 6:
d=${BASH_REMATCH[1]}
^-- SC2039: In POSIX sh, array references are undefined.
Line 7:
if [[ "$d" = *github* ]]; then
^-- SC2039: In POSIX sh, [[ ]] is undefined.
我正在尝试了解如何修复这些警告。我知道为了修复 [[ ]]
我需要将其切换到 [ ]
但随后由于 glob 出现错误。另外,我应该如何替换 =~
运算符?
最佳答案
当您编写 #!/bin/sh
时,您不应该使用像 [[
这样的特定于 bash 的功能。但是您不需要将 [[
更改为 [
或类似的东西;只需将 shebang 行更改为 #!/bin/bash
。然后您可以使用所有您喜欢的 bash 功能。
关于bash - 修复小型 Bash 程序中的 POSIX sh 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59553587/