BashSupport Pro支持的ShellCheck代码

这是 BashSupport Pro 支持的所有 ShellCheck 检查项。 请参考 ShellCheck 帮助手册 了解更多支持的功能。

我们的 Bash 集成开发工具 支持在编辑器中高亮显示 ShellCheck 消息, 也可以通过 # shellcheck 注释来抑制这些消息,此时会在类似 SC1000 这样的代码上显示提示信息。 请注意,这些描述信息是基于官方的 ShellCheck wiki 所生成的,因此其英文消息版权属于 ShellCheck 项目所有。

SC1000
$ 没有作为特殊用途,因此应被转义.
SC1001
在此上下文中,\o 将是普通的 'o'(无需转义)。
SC1003
要转义单引号? 请使用 echo 'This is how it'\''s done'
SC1004
此反斜杠+换行符是文字。如果您想断行,应在单引号外断行。
SC1007
如果要赋值,请移除 = 后的空格(对于空字符串,请使用 var='' ...)。
SC1008
此 shebang 未被识别。ShellCheck 仅支持 sh/bash/dash/ksh。请添加 'shell' 指令来指定。
SC1009
提到的解析错误位于...
SC1010
done 前使用分号或换行符(或加引号使其为文字)。
SC1011
这个撇号终止了单引号字符串!
SC1012
此处仅为文字t。要添加制表符,请改用 "$(printf '\t')"
SC1014
使用 if 命令; then .. 检查退出代码,或使用 if [ "$(命令)" = .. ] 检查输出。
SC1015
这是 Unicode 双引号。将其删除并重新输入。
SC1016
这是 Unicode 单引号。将其删除并重新输入。
SC1017
文字回车。通过 tr -d '\r' 运行脚本。
SC1018
这是 Unicode 的不间断空格。将其删除并使用空格键重新输入。
SC1019
此处应是一元条件的参数。
SC1020
应在 ]]] 前面添加空格
SC1026
如果对 [[..]] 内部的表达式分组,请使用 ( .. )
SC1027
此操作符需要另外一个参数。
SC1028
[..] 中需要转义 \( \) 或优先结合 [..] 表达式。
SC1029
[[..]] 中不应转义 ()
SC1033
测试表达式使用双 [[ 开始但却使用单个 ] 闭合。请确保它们能匹配。
SC1034
测试表达式使用双 [ 开始但却使用单个 ]] 闭合。请确保它们能匹配。
SC1035
在此处添加空格
SC1036
( 在此处无效。您是否忘记将其转义?
SC1037
大于 9 (例如 ${10})的位置参数需要大括号。
SC1038
Shell 是空格敏感的。使用< <(命令) 而非 <<(命令)
SC1039
移除结束标记前的缩进(或使用 <<- 并以制表符缩进)。
SC1040
使用 <<- 时,只能使用制表符缩进。
SC1041
在更下方找到 eof,但不在单独的一行上。
SC1042
请关闭包含 -eof (!= eof)的匹配。
SC1043
在更远处发现了EOF,但是大小写不正确。
SC1044
在 here 文档中找不到结束标记 EOF
SC1045
foo &; bar 中的分号多余,应为 foo & bar
SC1046
找不到此 if 对应的 fi
SC1047
fi 应匹配先前提及的 if
SC1048
不能有空then子句(使用 true 作为无操作)。
SC1049
您是否忘记了为这个 if 指定 then
SC1050
应为 then
SC1051
请勿在 then 后面直接使用分号。请删掉它。
SC1052
请勿在 then 后面直接使用分号。请删掉它。
SC1053
请勿在 else 后面直接使用分号。请删掉它。
SC1054
请在 { 后面添加空格。
SC1055
这里需要至少有一条命令。使用 true; 来不进行任何操作.
SC1056
此处应为 }。如果已经存在,请尝试在前面插入 ; 或者 \n
SC1057
你是否在此循环中忘记了写 do?
SC1058
此处应为 do
SC1059
do后面不允许直接跟随分号。你可以直接删除它。
SC1060
无法使用空的do语句(使用 true实现空操作)
SC1061
找不到此 dodone
SC1062
done 应匹配先前提及的 do
SC1063
do语句之前需要一个换行符或者分号。
SC1064
应使用 { 来开启函数定义。
SC1065
尝试声明参数?不能这么做。请使用 (),并将参数引用为 $1$2..
SC1066
请勿在赋值的左侧使用 $
SC1067
非直接引用,请使用数组,定义 "var$n=value", 或者(在sh中)使用readeval
SC1068
请勿在赋值中的 = 周围放置空格。
SC1069
请在 [ 前面添加空格。
SC1070
解析在此处终止。关键字不匹配或者圆括号无效?
SC1071
ShellCheck 仅支持 sh/bash/dash/ksh 脚本。很抱歉!
SC1072
意外 ..
SC1073
无法解析这里(项)。请修正以允许继续进行更多检查。
SC1074
您是否忘记了在之前的case 项目后面添加 ;;
SC1075
使用 elif 而非 else if
SC1076
尝试用数学?使用例如这样的代码:[ $((i/2+7)) -ge 18 ]
SC1077
对于命令扩展,请使用反引号: (` 对应 ´)。
SC1078
您是否忘记了关闭双引号字符串?
SC1079
这是右引号结束符,但是由于下一个字符的缘故,它看起来很可疑。
SC1080
你需要在换行之前使用 \来断开行 [ ]
SC1081
脚本区分大小写。请使用 if,而不是 If
SC1082
此文件具有 UTF-8 BOM。请使用此命令将其移除LC_CTYPE=C sed '1s/^...//' < 您的脚本文件
SC1083
{/} 为文字。检查表达式是否缺少 ;或使用引号将其括起来。
SC1084
在 shebang 中请使用 #! , 而非 !#
SC1086
请不要在 for 循环的迭代器名称中使用 $
SC1087
展开数组时请使用大括号,例如: ${array[idx]} (或 ${var}[.. 以静默)。
SC1088
解析在此处终止。是否括号使用无效?
SC1089
解析在此处终止。此关键字是否正确匹配?
SC1090
无法追踪非常量源。请使用指令指定位置。
SC1091
未遵循:(此消息为报错信息)
SC1092
在100 源代码 帧停止 :O
SC1094
解析源文件失败。忽略。
SC1095
您需要在函数名称和函数体之间插入空格或换行符。
SC1097
意外 ==。对于赋值语句,请使用 =。对于比较,请使用 [[[
SC1098
使用 eval 时,请使用引号或转义特殊字符,例如: eval "a=(b)"
SC1099
请在 # 前面添加空格。
SC1100
这是 Unicode 短划线。请删除并重新输入为 ASCII 减号字符(英文半角)。
SC1101
请删除 \ 后面的尾随空格以断行(或用引号表示空格字符)。
SC1102
Shell 以不同方式消除 $(( 歧义或根本不消除歧义。对 $(命令替换),在$(后面添加空格。对 $((算数)),修复解析错误。
SC1103
shell类型不可识别。请使用例如shbash
SC1104
在 shebang 中请使用 !# ,而非只有 !
SC1105
Shell 以不同方式消除 (( 歧义或根本不消除歧义。如果首个 ( 应开始 subshell,请在其后添加空格。
SC1106
在算数上下文中,请使用 < 来代替 -lt
SC1107
该指令未知。它将被忽略。
SC1108
请在 = 前后添加空格。
SC1109
这是未加引号的 HTML 实体。请替换为对应的字符。
SC1110
这是 Unicode 引号。删除并重新输入英文半角引号(或加引号使其为文字)。
SC1111
这是 Unicode 引号。删除并重新输入英文半角引号(或者忽略/加单引号使其为文字)。
SC1112
这是 Unicode 引号。删除并重新输入英文半角引号(或者忽略/加双引号使其为文字)。
SC1113
在 shebang 中请使用 #! ,而非只有 #
SC1114
请移除 shebang 前面的前导空格。
SC1115
请在 shebang 中移除 #! 之间的空格。
SC1116
$((..)) 表达式中缺少 $?(如果是数组,请使用 ( ()。
SC1117
反斜杠为 "\n" 中的文字。首选显式转义:"\\n"
SC1118
请删除 here 文档结束标记后的空格。
SC1119
在结束标记和终止 ) 之间添加换行符。
SC1120
here 文档标记后面不允许注释。请改为注释下一行。
SC1121
在含有 << 的行中添加 ;/& 终止符(和其他语法),而不是在这里添加。
SC1122
结束标记后面不允许有任何内容。要继续一条命令,请将其放在包含 << 的行中。
SC1123
ShellCheck 指令仅在 if 等完整复合命令(而非例如单个 elif 分支)前有效。
SC1124
ShellCheck 指令仅在完整命令如 case 语句前有效,而非单个 case 分支。
SC1125
指令中的 键=值 对无效
SC1126
请将 ShellCheck 指令放在命令前面,而不是后面。
SC1127
您是想要创建注释吗?请在 sh 中使用 #
SC1128
shebang 必须在第一行。请删除空格并移动注释。
SC1129
请在 ! 前面添加空格。
SC1130
请在 : 前面添加空格。
SC1131
请使用 elif 来开始另一分支。
SC1132
& 会终止命令。请将其转义或在 & 后面添加空格以静默。
SC1133
意外的新行首。如需断行,||| 或者 && 应放在上一行的末尾。
SC1134
无法解析shellcheckrc
SC1135
请转义结尾的引号以使 $ 成为文字。请使用 "It costs \$5" 来代替 "It costs $"5
SC1136
在结束的 ] 后面有意外字符。缺少分号或换行符?
SC1137
for ((;;)) 循环中无法开始算术,缺少第二个 (
SC1138
Shell对空格敏感。请使用 < <(cmd),不能用 << (cmd)
SC1139
请在测试命令之间使用 || 代替 -o
SC1140
条件之后出现意外的参数。缺少 &&|| 或者表达式错误?
SC1141
在复合命令后意外出现标识。重定向错误或者缺少 ;&&|| 或者 |
SC1142
使用 done < <(cmd) 来从进程替换(现在缺少一个<)。
SC1143
此反斜杠是注释的一部分,因此不会继续当前行。
SC1144
外部-源代码 只能在 .shellcheckrc 中启用,不能在单个文件中用。
SC1145
未知的外部-源代码值。需要 true/false
SC2000
请确认是否可改用 ${#variable}
SC2001
请确认是否可改用 ${variable//search/replace}
SC2002
冗余的 cat。可以考虑改用 cmd < file | ..cmd file | ..
SC2003
expr 已过时。可使用 $((..)), ${}[[ ]] 进行重写。
SC2004
$${} 在算术变量上非必要。
SC2005
冗余的echo?不要使用echo $(cmd),而是使用cmd
SC2006
不使用旧版的反引号`...`,请使用$(...) 表示法代替。
SC2007
请使用 $((..)) 代替废弃的 $[..]
SC2008
echo 不从 stdin 读取,您确定您仍要通过管道来通向它?
SC2009
SC2009 考虑使用 pgrep 代替 grep ps 输出。
SC2010
不要使用 ls | grep。请使用 glob 或条件 for 循环来允许使用非字母数字文件名。
SC2011
使用 find -print0find -exec来更好的处理非字母数字文件名。
SC2012
使用 find 来代替 ls 来更好地处理非字母数字文件名。
SC2013
要读取行而不是单词,应通过管道通向或重定向输出到 while read 循环。
SC2014
这将在 find 运行之前仅展开一次,而不是对每个找到的文件展开一次。
SC2015
注意,A && B || C 并非 if-then-else 。A 为 true 时 C 可能会运行。
SC2016
表达式不应用单引号展开,请使用双引号。
SC2017
a/b*c 替换为 a*c/b 以提高精度。
SC2018
使用 [:lower:] 支持重音和外来字母。
SC2019
使用 [:upper:] 支持重音和外来字母。
SC2020
tr 替换字符集合,而非单词(由于重复而提及)。
SC2021
不要在 tr 范围内使用 [],它会替换文字方括号。
SC2022
注意与 glob 不同 ,o* 在此处匹配 ooo 而非 oscar
SC2023
shell可能覆盖在man time(1)中看到的time 。请使用 command time .. 来代替。
SC2024
sudo 不影响重定向。使用 ..| sudo tee file
SC2025
确保所有转义序列都被 \[..\] 封闭以防止出现换行问题。
SC2026
这个词在引号之外。您是想 '嵌入 '"'单引号'"' 代替' 吗?
SC2027
包围的引号实际取消了引号。将其移除或转义。
SC2028
echo 不会展开转义序列。请考虑使用 printf
SC2029
注意如果未转义,将在客户端展开。
SC2030
var 的修改是局部的(通过管道引起的 subshell)。
SC2031
在 subshell 中对 var 进行了修改。这种变更可能会丢失。
SC2032
使用您自己的脚本或 sh -c '..'su 运行。
SC2033
Shell 函数不能传递给外部命令。请使用单独的脚本或者 sh -c。
SC2034
foo 似乎未使用。对其进行验证或导出。
SC2035
使用 ./\*glob*-- \*glob*,以使带短划线的名称不会变成选项。
SC2036
如果您想赋值管道的输出,请使用 a=$(b | c)
SC2037
要赋值命令的输出,请使用 var=$(cmd)
SC2038
使用 -print0-0find -exec +,以允许使用非字母数字文件名。
SC2039
在 POSIX sh 中,某些 *写法* 尚不支持。
SC2040
已指定 !/bin/sh,因此即使 sh 实际上是 bash 也不会支持 ____。
SC2041
这是文字字符串。要想作为命令运行,请使用 $(..) 代替使用 '..'
SC2042
请使用空格而非分号来隔开循环元素。
SC2043
此循环只对一个常量值运行一次。您是否想对dir/*, $var$(cmd) 进行循环?
SC2044
在 find 输出上进行 for 循环会比较脆弱。请使用 find -execwhile read 循环。
SC2045
在 ls 输出上进行迭代会比较脆弱。请使用 glob。
SC2046
使用引号将其引起来,以防止单词分割 。
SC2048
使用 "$@"(带引号)避免产生空格问题。
SC2049
=~ 用于正则表达式,但这看起来像 glob。请改用 =
SC2050
此表达式为常量。您是否遗忘了变量上的 $
SC2051
Bash 在大括号范围展开中不支持变量。
SC2053
[[ ]] 中为 = 右侧的元素加引号以防止 glob 匹配。
SC2054
请使用空格代替分号来隔开数组元素。
SC2055
您可能需要在此使用 &&,否则它会一直返回 true。
SC2056
您可能需要在此使用 &&
SC2057
未知的二元操作符。
SC2058
未知的一元操作符。
SC2059
不要在 printf 格式字符串中使用变量。请使用如下语法: printf "..%s.." "$foo"
SC2060
为 tr 的参数加引号来防止 glob 展开。
SC2061
-name 的参数加引号,这样 shell 就不会解释它。
SC2062
为 grep 模式加引号,这样 shell 就不会解释它。
SC2063
Grep 使用正则表达式,但这看起来像是 glob。
SC2064
请使用单引号,这样仅在发出信号时才展开,而不是立即展开。
SC2065
这将被解释为 shell 文件重定向,而非比较。
SC2066
由于您用双引号将其引起,因此不会分割单词,因此循环将只运行一次。
SC2067
缺少 ;+ 将终结 -exec。请不要使用 |||&& ,并使用引号将 ; 引起作为单独参数。
SC2068
用双引号引起数组扩展以避免重新分割元素。
SC2069
要想重定向stdout+stderr,2>&1必须放置在末尾(或者使用{ cmd > file; } 2>&1来明确含义)。
SC2070
-n 不能与未加引号的参数共同工作。请加引号或使用 [[ ]]
SC2071
> 被用于字符串比较。请使用 -gt 代替。
SC2072
不支持小数。请仅使用整数,或者使用 bcawk 来进行比较。
SC2073
请转义 \< 以避免它产生重定向(或切换为[[ .. ]])。
SC2074
无法在[ ]中使用 =~。请使用 [[..]] 来代替。
SC2075
在代码[..]中需要转义 \<,但是在 [[..]]中无效
SC2076
请不要为 =~ 右侧的元素加引号,它会按文字匹配而不是作为正则表达式匹配。
SC2077
比较运算符前后需要使用空格围起。
SC2078
此表达式为常量。您是否在某些地方忘了加 $
SC2079
(( )) 不支持小数,请使用 bcawk
SC2080
使用0开头的数字降为被处理八进制数字。
SC2081
[ .. ] 无法匹配 glob。请使用 [[ .. ]] 或者 grep。
SC2082
要想使用间接展开,请使用 name="foo$n"; echo "${!name}"
SC2083
./file的斜线后面不要添加空格。
SC2084
去掉 $ 或者_=$((expr)) 来避免执行输出。
SC2086
请使用双引号来避免 glob 和单词分割。
SC2087
使用引号括起来 EOF 来使 here 文档的展开发生在服务器端而不是发生在客户端。
SC2088
引号中的波浪符号不会被展开。请使用 $HOME
SC2089
引号/反斜线将会被处理为文字。请使用数组。
SC2090
此变量中的引号/反斜线不会被处理。
SC2091
请移除包围的 $() 来避免执行输出(或者使用 eval 达到预期)。
SC2092
移除反斜线来避免执行输出。
SC2093
如果希望此命令后脚本继续进行,请删除 exec
SC2094
请确保不要在相同的管道中读取和写入同一文件。
SC2095
使用 ssh -n 来避免 ssh 吞下 stdin。
SC2096
在大多数操作系统中,shebang 只能指定单个参数。
SC2097
此赋值仅能被复刻的进程看到。
SC2098
此展开将无法看到提到的赋值。
SC2099
使用 $((..)) 来进行数字运算,例如 i=$((i + 2))
SC2100
使用 $((..)) 来进行数字运算,例如 i=$((i + 2))
SC2101
被命名的类外部需要包裹 [], 例如 [[:digit:]]
SC2102
范围只能匹配单个字符(会因为重复提及)。
SC2103
使用 ( subshell ) 来避免必须 cd 回来。
SC2104
在函数中,请使用 return 来代替 break
SC2105
break 仅在循环语句中才有效
SC2106
这只会存在于被管道产生的 subshell 中。
SC2107
请不要使用[ a && b ],应使用 [ a ] && [ b ]
SC2108
[[..]]中,请使用 && 代替 -a
SC2109
请不要使用 [ a || b ],应使用 [ a ] || [ b ]
SC2110
[[..]]中,请使用 || 代替 -o
SC2111
ksh不允许 function 关键字和 () 同时存在。
SC2112
function 关键字不是标准。请删除它。
SC2113
function 关键字不是标准。请使用 foo() 代替 function foo
SC2114
警告:删除系统文件目录。
SC2115
使用 "${var:?}" 来确保永不会展开到 /*
SC2116
无用的 echo?请勿使用 cmd $(echo foo),仅使用 cmd foo 即可。
SC2117
要想使用另一个用户来运行命令,请使用 su -c 或者 sudo
SC2118
Ksh不支持 |&。请使用2>&1 |
SC2119
如果函数的参数 $1 应等于脚本的 $1,请使用代码 foo "$@"
SC2120
foo 引用了参数,但是没有一个参数被传递进来。
SC2121
要想给变量赋值,请使用 var=value,而不是用 set ..
SC2122
>= 并非有效操作符。请使用 ! a < b 来代替。
SC2123
PATH 是被 shell 所使用的搜索路径。请另外选一个名字。
SC2124
试图给字符串赋值一个数组!请给数组赋值,或者使用 * 代替 @ 来进行连接操作。
SC2125
在赋值语句中,花括号展开和 glob 会被当做文字。请使用引号引起或者使用数组。
SC2126
请考虑使用 grep -c 来代替 grep | wc
SC2127
要想使用 ${ ..; },请在 #!/usr/bin/env ksh中指定。
SC2128
展开一个数组但不提供索引,将只能得到第一个元素。
SC2129
考虑使用 { cmd1; cmd2; } >> file 来代替多个单重定向语句。
SC2130
-eq 仅用来进行整数比较。请使用 = 来代替(比较字符串)。
SC2139
这种展开只能在定义的时候进行,而非使用的时候进行展开。请考虑使用转义。
SC2140
单词格式为 "A"B"C" (B 作为其中明确定义的词). 您是否想要使用 "ABC" 或者 "A\\"B\\"C"
SC2141
您是否想要表达 IFS=$'\t'
SC2142
别名不能使用位置参数。请使用函数。
SC2143
请使用 grep -q 代替使用 [ -n .. ] 进行输出比较。
SC2144
-e 不能和 glob 一起工作。请使用 for 循环。
SC2145
参数中混合了字符串和数组。请使用 * 或者独立的参数。
SC2146
此动作会忽略 -o 前面的任何内容。请使用 \( \) 进行分组。
SC2147
PATH 中的~在不同程序中工作起来效果很差(不一致)。
SC2148
提示信息依赖于目标 shell 但是您的 shell 类型未知。请添加 shebang。
SC2149
请在数字下标中删除 $${} ,或者转义为字符。
SC2150
-exec 不会自动调用 shell。请使用 -exec sh -c .. 来达到此目的。
SC2151
只能返回唯一的 0 到 255 之间的整数。使用 stdout(标准输出)来返回其他数据。
SC2152
只能返回 0 到 255 之间的整数. 其他数据应该写入到stdout(标准输出)。
SC2153
可能存在拼写错误:MYVARIABLE 有可能无法赋值。您是想要用 MY_VARIABLE 吗?
SC2154
var 被引用了,但从未被赋值。
SC2155
将声明和赋值分开以避免覆盖返回值。
SC2156
注入文件名即容易出问题又不安全。请使用参数。
SC2157
由于内容是文字字符串,因此推断 -n 总是会返回真。
SC2158
[ false ] 的结果是真。请删除中括号
SC2159
[ 0 ] 的结果是真。请使用 false 来代替。
SC2160
请勿使用 [ true ],使用 true 即可。
SC2161
请勿使用 [ 1 ],使用 true 即可。
SC2162
read 不结合 -r 使用会干扰反斜线。
SC2163
这将不会导出 FOO。请删除 $${} ,或者使用 ${var?} 来静默。
SC2164
如果 cd 失败,请使用 cd ... || exit 来代替。
SC2165
此嵌套循环内部会覆盖父循环中的索引变量。
SC2166
请使用 [ p ] && [ q ] ,因为 [ p -a q ] 的定义不明确,结果不确定。
SC2167
此父循环的索引变量已经被覆盖。
SC2168
local 只在函数中才有效。
SC2169
dash目前尚不支持您的 *某些写法* 。
SC2170
-eq 比较的数字无效。请使用 = 来作为字符串比较(或者使用 $var 扩展为变量)。
SC2171
在条件测试末尾出现 ]。添加缺少的 [ 或者有意将其用引号引起来。
SC2172
使用数字直接捕获陷阱信号的含义不明确。请优先使用信号名字。
SC2173
SIGKILL/SIGSTOP 无法被捕获。
SC2174
当与 -p 一起使用时,-m 仅能应用于最深级别的目录。
SC2175
将此无效的花括号扩展用引号引起,因为 eval 只能操作传递进去的文字信息
SC2176
time 未对管道定义。请 time 单个命令或者使用 bash -c 来代替。
SC2177
time 未对组合命令定义。请使用 time bash -c 来代替。
SC2178
变量被当做数组使用,但是却给赋值了一个字符串。
SC2179
使用 array+=("item") 来添加元素到数组中。
SC2180
Bash 不支持多维数组。请使用一维数组或者关联数组。
SC2181
请使用例如 if mycmd; 直接检查退出码,而非间接的使用 $?
SC2182
printf 格式化字符串中没有变量。其它参数会被忽略。
SC2183
此格式化字符串包含了两个变量,但是却只传过来一个参数。
SC2184
将 unset 的参数引起来,这样它们就不会被 glob 展开。
SC2185
某些 finds 没有默认路径。请显式指定 .
SC2186
tempfile 已被废弃。请使用 mktemp 。
SC2187
Ash 脚本将会被作为 Dash 检察。添加 # shellcheck shell=dash 来静默。
SC2188
此重定向中没有命令。将其移动到对应的命令处(或者使用 true 来作为无操作)。
SC2189
您不能在这个重定向和它要应用的命令中间放置 | 符号。
SC2190
关联数组中的元素需要索引键,例如:array=( [index]=value )
SC2191
这里的 = 是文字。要想给索引赋值,请使用不带空格的 ( [index]=value ) 。要想保留为文字,请用引号引起。
SC2192
此数组元素没有值。请删除 = 号后面的空格或者使用 "" 来表示空字符。
SC2193
此比较中的参数永远不会相同。请确保您的语法正确无误。
SC2194
此单词是常量。您是否忘了变量前面的 $
SC2195
这个模式永不会匹配 case 表达式中的单词。请再次检察。
SC2196
egrep 是非标准的且已被废弃。请使用 grep -E 来代替。
SC2197
fgrep 是非标准的且已被废弃。请使用 grep -F 来代替。
SC2198
数组 [ ] 中的运算对象无法工作。请使用循环(或者使用 * 代替 @ 来进行连接)。
SC2199
数组[[ ]]中会隐式的执行连接操作。请使用循环(或者使用 * 代替 @ 来进行连接)。
SC2200
[ ] 中的花括号展开不能工作。请使用循环。
SC2201
[[ ]]中的花括号展开不会发生。请使用循环。
SC2202
[ ] 中的 glob 不能工作。请使用循环。
SC2203
[[ ]]中的 glob 被忽略了,除非放在 =!=右侧。请使用循环。
SC2204
(..) 是 subshell。您是指 [ .. ],一个测试表达式吗?
SC2205
(..) 是 subshell。您是指 [ .. ],一个测试表达式吗?
SC2206
使用引号来阻止单词分割或glob,或者用更健壮的分割方式:mapfile 或 read -a
SC2207
首选 mapfile 或者 read -a 来分割命令输出(或者使用引号来避免分割)。
SC2208
使用 [[ ]] 或者引号来避免 -v 参数发生 glob 展开。
SC2209
使用 var=$(command) 来给输出赋值(或者引号来赋值为字符串)。
SC2210
这是一个文件重定向。是否是一个比较或者 fd 操作?
SC2211
这是一个作为命令名称的 glob 。您是否期望它是 ${..},数组,或者缺少了引号包围?
SC2212
使用 false 来代替空的 [[[ 条件语句。
SC2213
getopts 指定了 -n,但是没有被这里的 case 语句来处理。
SC2214
此 case 语句没有在 getopts 中指定。
SC2215
这个标记被用作了命令名。换行错误或者忘记了 [ .. ]
SC2216
管道重定向到 rm,一个不读取标准输入 stdin 的命令。 用错命令了还是忘记了 xargs
SC2217
管道重定向到 echo,一个不读取标准输入 stdin 的命令。引号用错了还是忘记了 xargs
SC2218
此函数定义位置在后面(调用处之后)。请将定义上移(到调用处之前)。
SC2219
请使用 (( expr )) 来代替 let expr
SC2220
无效标记未被处理。请添加一个 *) case 语句。
SC2221
此规则一直会覆盖后面的那个。
SC2222
因为上一个规则,此规则决不会匹配上。
SC2223
默认赋值可能会因为 glob 而导致Dos(拒绝服务)。请用引号引起。
SC2224
mv 命令没有跟随目标。请检查参数。
SC2225
cp 命令没有跟随目标。请检查参数。
SC2226
ln 命令没有跟随目标。请检查参数,或显式的指定 .
SC2227
重定向应用到了 find 命令自身上。重写来对每个操作进行工作(或者移动到末尾)。
SC2229
这里并未读取 foo。删除前置的 $${} ,或者使用 ${var?} 来静默。
SC2230
which 不是标准命令。请使用内置的 command -v 代替。
SC2231
for 循环中的 glob 扩展引起来以避免单词分割,例如 "$dir"/*.txt
SC2232
无法将 sudo 和内置命令如 cd 一起使用。您是否想用 sudo sh -c .. 代替?
SC2233
删除条件语句周围的 (..) 来避免 subshell 开销。
SC2234
删除测试命令周围的 (..) 来避免 subshell 开销。
SC2235
请使用 { ..; } 代替 (..) 来避免 subshell 开销。
SC2236
请使用 -n 代替! -z
SC2237
请使用 [ -n .. ] 代替 ! [ -z .. ]
SC2238
请从命令名重定向自或者重定向到而不是对文件。您是否想要 管道/xargs(或者加引号来忽略)?
SC2239
请确保 shebang 中使用的是解释器的绝对路径。
SC2240
sh/dash中的 点(.)命令不支持参数。请将它们设置为变量。
SC2241
退出状态码只能是 0 到 255 之间的某个整数。其它数据应该写入到stdout(标准输出)。
SC2242
只能退出状态码 0 到 255。其它数据应该写入到stdout(标准输出)或者 stderr(错误输出)。
SC2243
首选使用 -n 来检察输出(或者不包含 [[[ 来运行命令以检查执行成功)
SC2244
首选使用 -n 来检察输出非空字符串(或用 =-ne 来检察布尔值或整数)。
SC2245
-d 仅会应用到当前 glob 中的第一个展开。使用循环来检察任一个或者全部。
SC2246
当前 shebang 指定了一个目录。请确保解释器是一个文件。
SC2247
如果要作为引号代替,请交换开头的 $"
SC2248
当变量名未包含任何特殊字符时使用双引号。
SC2249
请考虑添加默认的 *) case,即使它只是因为错误退出。
SC2250
即使没有严格的要求,也应优先给变量引用周围添加括号。
SC2251
此处的 ! 并非一个条件判断而是会跳过 errexit。请使用 && exit 1 来代替,或者确保 $? 已被检查。
SC2252
您可能需要在此处添加 && ,否则它将一直是真。
SC2253
使用 -R 以递归,或者显式的使用 a-r 来删除读权限。
SC2254
请使用引号扩展来进行文字匹配而非 glob。
SC2255
[ ] 不能用于算术运算。使用 $((..)) 来计算数字,或者使用字符串比较符来比较字符串。
SC2256
变量名是一个翻译后的字符串。如果要作为引号代替,请交换开头的 $"
SC2257
命令重定向中的数学修改可能会被丢弃。请在单独的步骤中执行。
SC2259
此重定向覆盖了输入管道。要想两个都生效,请合并或者传递文件名。
SC2260
此重定向覆盖了输出管道。 使用 tee 来同时输出。
SC2261
多个重定向产生了竞争标准输出。请使用 cattee 或者传递文件名来代替。
SC2262
别名不能在同一个解析单元中定义和使用。请使用函数来代替。
SC2263
因为它们位于同一个解析单一,此命令不会引用到之前提到的别名。
SC2264
此函数无条件的重复调用自身(死循环调用)。遗漏了 command
SC2265
请使用&& 来实现逻辑与。单个&将会后置并返回true。
SC2266
请使用&& 来实现逻辑与。单个&将会后置并返回true。
SC2267
GNU xargs -i 已废弃,请使用 -I{}
SC2268
避免在比较中使用 x- 前缀因为它已不会有任何用处。
SC2269
自变量被赋值给了自身,因此赋值将不会产生任何效果。
SC2270
要想给位置参数赋值,请使用 set -- first second .. (或者使用 [ ] 以进行比较)。
SC2271
对于间接访问,请使用数组,declare "var$n=value"或者(对于 sh 脚本)使用 read/eval
SC2272
命令名称包含 ==。如要进行比较操作,请使用 [ "$var" = 值 ]
SC2273
发现 === 序列。代码合并冲突或者是想用来表示注释分界?
SC2274
命令名以 === 开始。想用来表示注释分界?
SC2275
命令名以 =开始。换行错误?
SC2276
这将被解释为包含 = 的命令名。赋值错误或者想要进行比较?
SC2277
在 bash 中使用 BASH_ARGV0 来给 $0 赋值(或者使用 [ ]进行比较)。
SC2278
$0 无法在 Ksh 中被赋值(但是它的确映射为当前的函数名)。
SC2279
$0 无法在 Dash 中被赋值。这将变成一个命令名。
SC2280
$0 无法使用此方式赋值,而且当前尚无其它通用的替代方式。
SC2281
请不要在赋值语句左侧使用 $ 或者 ${}
SC2282
变量名不能使用数字开始,这将被解释为命令。
SC2283
使用 [ ] 来比较值,或者删除 = 号周围的空格来进行赋值(或者引起 '=' 来表示文字)。
SC2284
使用 [ x = y ] 来比较值(或者引起 '=' 来表示文字)。
SC2285
删除 += 号周围的空格来进行赋值(或者引起 '+=' 来表示文字)。
SC2286
此空字符串被解释为了命令名。请再次检查语法(或使用 true 作为无操作)。
SC2287
这将被解释为以 '/' 结尾的命令名。请再次检查语法。
SC2288
这将被解释为以逗号结尾的命令名。请再次检查语法。
SC2289
这将被解释为包含换行符的命令名。请再次检查语法。
SC2290
删除 = 号周围的空格来进行赋值。
SC2291
请将重复的空格引起以避免彼此折叠成为单个空格。
SC2292
在 Bash 或 Ksh 中首选使用 [[ ]] 代替 [ ] 进行测试。
SC2293
当对 @Q-引起的词语进行求值时,请使用 * 来代替 @ 作为索引。
SC2294
eval 语句的劣势抵消掉了数组的优势。去掉 eval 来保留空格或符号(或者作为字符串来进行 eval)。
SC2295
${..} 中进行展开需要单独进行引起,否则它们会被作为模式比较。
SC2296
参数展开不能以 { 开始。请再次检查语法。
SC2297
双引号必须放在外面,${}: ${"invalid"} 对应 "${valid}"
SC2298
${$x} 无效。对展开操作,请使用 ${x}。对间接引用,请使用数组,${!x} 或(对于 sh 脚本)使用 eval。
SC2299
参数展开不能内嵌。 请使用临时变量。
SC2300
参数展开不能用来进行命令替换。请使用临时变量。
SC2301
参数展开以意外的引号开始。请再次检查语法。
SC2302
在值上循环。要想在键上循环,请使用 "${!array[@]}"
SC2303
i是一个数组值,不是一个主键。请直接使用或者在键上循环来代替。
SC2304
*必须转义以进行乘法:\*。现代的 $((x * y)) 已经避免了此问题。
SC2305
对 expr 的正则参数用引号引起来避免被作为 glob 展开。
SC2306
转义参数中的glob字符为表达式来避免路径名称展开。
SC2307
expr 需要至少3个参数但是现在只看到了一个。 请确保每个操作符、操作数是一个独立的参数,并且转义 <>&|。
SC2308
expr length 包含未指定的结果。请优先使用 ${#var}
SC2309
-eq 将会把这当做变量。使用 = 号来作为字符串比较(或者用 $var 显式展开)
SC2310
如果一个 'if' 条件成立,此函数会被调用,此时设置的-e会失效。如果要想出现失败时退出脚本执行,请将调用分开。
SC2311
因为处于命令置换中,会隐式禁用此函数执行设置的 -e。 请在之前添加设置 -e,或者启用 inherit_errexit。
SC2312
考虑单独调用这个命令来避免遮掩它的返回值(或者使用 '|| true' 以忽略)。
SC2313
请将数组下标用引号引起以避免被展开为 glob。
SC2314
在 bats 中,! 不会引起测试失败。
SC2315
在 bats 中,! 不会引起测试失败。请将 ! 折叠到条件中!
SC2316
这将局部范围内使变量名只读,可能并非你的本意。使用单独的命令或者对应的 declare选项代替。
SC2317
命令似乎不可触达。请检查用法(或者间接调用时忽略)。
SC2318
此赋值被此declare再次使用,但是却无法生效。请使用两个 declare
SC2319
$? 引用到一个条件,但不是一个命令。赋值给变量来避免其被覆盖。
SC2320
$? 引用到echo/printf,并非上一个命令。赋值到变量来避免它被覆盖掉。
SC2321
数组下标已经是算术上下文。建议删除 $(())
SC2322
在算术上下文中, ((x))(x)相同。建议只留下一层圆括号。
SC2323
a[(x)]a[x]相同。建议不要在用额外圆括号围起来。
SC3001
在 POSIX sh 中,未定义进程展开。
SC3002
在 POSIX sh 中,未定义 extglob。
SC3003
在 POSIX sh 中,未定义 $'..'
SC3004
在 POSIX sh 中,未定义 $".."
SC3005
在POSIX sh中,未定义循环计数。
SC3006
在 POSIX sh 中,未定义 standalone ((..))
SC3007
在POSIX sh中,未定义 $[..] 来代替 $((..))
SC3008
在POSIX sh中,选择循环未定义。
SC3009
在POSIX sh中,未定义大括号扩展。
SC3010
在 POSIX sh 中,未定义 [[ ]]
SC3011
在POSIX sh中,here-字符串未定义。
SC3012
在 POSIX sh 中,未定义词汇 \<
SC3013
在 POSIX sh 中,未定义 -nt
SC3014
在 POSIX sh 中,未定义使用== 来代替 =
SC3015
在 POSIX sh 中,未定义 =~ 正则表达式匹配。
SC3016
在POSIX sh中,单目运算符 -v(用来代替 [ -n "${var+x}" ])未定义。
SC3017
在 POSIX sh 中,未定义使用一元运算符 -a 来代替 -e
SC3018
在 POSIX sh 中,未定义 ++
SC3019
在 POSIX sh 中,未定义指数。
SC3020
在 POSIX sh 中,未定义 &>
SC3021
在 POSIX sh 中,未定义 >& filename(作为>& fd的相反项)。
SC3022
在 POSIX sh 中,未定义 命名文件描述符。
SC3023
在 POSIX sh 中,未定义超出 0 到 9 范围的文件描述符。
SC3024
在 POSIX sh 中,未定义 +=
SC3025
在 POSIX sh 中,未定义 /dev/{tcp,udp}
SC3026
在 POSIX sh 中,未定义在 glob 括号展开表达式中使用 ^ 来代替 !
SC3028
在 POSIX sh 中,未定义这些全大写变量 VARIABLE。
SC3029
在POSIX sh中, |&代替 2>&1 |未定义。
SC3030
在POSIX sh中,数组未定义。
SC3031
在 POSIX sh 中,未定义从 glob 重定向自或者重定向到。
SC3032
在POSIX sh中,coproc 未定义。
SC3033
在POSIX sh中, [a-zA-Z_][a-zA-Z0-9_]*之外的命名函数未定义。
SC3034
在 POSIX sh 中,未定义 $(<文件)
SC3035
在 POSIX sh 中,未定义 `<file`
SC3036
在Dash中,不支持在 -n 之外的echo标记。
SC3037
在 POSIX sh 中,未定义 echo 标记。
SC3038
在 POSIX sh 中,未定义 exec 标记。
SC3039
在 POSIX sh 中,未定义 let
SC3040
在 POSIX sh 中,未定义 *[name]*的设置选项。
SC3041
在POSIX sh中,设置标记-E未定义
SC3042
在POSIX sh中,设置标记 --default 未定义
SC3043
在 POSIX sh 中,未定义 local
SC3044
在 POSIX sh 中,未定义 declare
SC3045
在 POSIX sh 中,未定义某些需要标记的命令。
SC3046
在 POSIX sh 中,未定义使用 source 来代替 .
SC3047
在 POSIX sh 中,未定义陷阱 ERR。
SC3048
在 POSIX sh 中,未定义在 SIG 中使用前缀信号名称。
SC3049
在 POSIX sh 中,未定义使用小写或者混合大小写的信号名称。
SC3050
在 POSIX sh 中,未定义 printf %q
SC3051
在POSIX sh中, source 代替.未定义
SC3052
在POSIX sh中,基于算术的转换未定义
SC3053
在 POSIX sh 中,未定义间接展开。
SC3054
在 POSIX sh 中,未定义数组引用。
SC3055
在 POSIX sh 中,未定义数组键展开。
SC3056
在 POSIX sh 中,未定义前缀名称匹配。
SC3057
在 POSIX sh 中,未定义字符串索引。
SC3059
dash中不支持大小写修改,在 POSIX sh 中未定义。
SC3060
在 POSIX sh 中,未定义字符串替换。

    © 2020–2024 Joachim Ansorg
    声明
    隐私政策
    许可条款