我正在编写简单的shell脚本,当我在https://www.shellcheck.net上检查我的脚本时,它在第14行给出了错误
Line 14:
sysrc ifconfig_"${Bridge}"="addm ${NIC}"
^-- SC2140: Word is of the form "A"B"C" (B indicated). Did you mean "ABC" or "A\"B\"C"?https://github.com/koalaman/shellcheck/wiki/SC2140
其实我不知道怎么改正
#!/bin/sh
Setup() {
# Determine interface automatically
NIC="$(ifconfig -l | awk '{print $1}')"
# Enabling the Bridge
Bridge="$(ifconfig bridge create)"
# Next, add the local interface as member of the bridge.
# for the bridge to forward packets,
# all member interfaces and the bridge need to be up:
ifconfig "${Bridge}" addm "${NIC}" up
# /etc/rc.conf
sysrc cloned_interfaces="${Bridge}"
sysrc ifconfig_"${Bridge}"="addm ${NIC}"
# Create bhyve startup script
touch /usr/local/etc/rc.d/bhyve
chmod +x /usr/local/etc/rc.d/bhyve
cat << 'EOF' >> /usr/local/etc/rc.d/bhyve
#!/bin/sh
# PROVIDE: bhyve
# REQUIRE: DAEMON
# KEYWORD: shutdown
. /etc/rc.subr
name=bhyve
start_cmd="${name}"_start
bhyve_start() {
}
load_rc_config "${name}"
run_rc_command "$1"
EOF
sysrc bhyve_enable="YES"
}发布于 2020-12-26 23:02:19
单弦
ifconfig_"${Bridge}"="addm ${NIC}"是相同的
"ifconfig_$Bridge=addm $NIC"(不需要花括号,整个字符串可以由一组双引号引用)
由于使用双引号引用同一字符串的两个单独部分,ShellCheck想知道是否意味着引号的“内部对”是字面的,实际上是字符串的一部分,即是否意味着编写fconfig_"${Bridge}\"=\"addm ${NIC}"。
因为您没有,所以最好像我前面展示的那样重写字符串,只是为了清楚地表明它是一个没有嵌入引号的字符串。
请注意,您的代码在这里的引用方面没有出错,而且ShellCheck只是询问您的意图,因为这是(可以说)一个常见的错误,当您确实希望字符串中包含文字双引号时。
如果您对引用字符串的方式有强烈的感觉,那么可以在受影响的行之前的注释中使用一个指令禁用ShellCheck警告:
# shellcheck disable=SC2140
sysrc ifconfig_"${Bridge}"="addm ${NIC}"这基本上意味着“我知道我在做什么,并且规则SC2140不适用于这里,非常感谢。”
发布于 2020-12-26 23:06:15
如果你跟着建议的接2140解释链接,你得到了这条短信,
Problematic代码:
echo "" > file.html或
export "var"="42"Correct代码:
echo "" > file.html或
export "var=42"看第二个例子--它的结构与您的代码几乎相同
sysrc ifconfig_"${Bridge}"="addm ${NIC}"你被告知的是检查双引号是否应该是字符串的一部分,或者你是否只需要额外的引号。在你的例子中,这是第二个选项,这行应该写成
sysrc "ifconfig_${Bridge}=addm ${NIC}"https://unix.stackexchange.com/questions/626241
复制相似问题