首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ShellCheck关于引用("A"B"C")的警告

ShellCheck关于引用("A"B"C")的警告
EN

Unix & Linux用户
提问于 2020-12-26 22:46:10
回答 2查看 750关注 0票数 4

我正在编写简单的shell脚本,当我在https://www.shellcheck.net上检查我的脚本时,它在第14行给出了错误

代码语言:javascript
复制
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

其实我不知道怎么改正

代码语言:javascript
复制
#!/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"
}
EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2020-12-26 23:02:19

单弦

代码语言:javascript
复制
ifconfig_"${Bridge}"="addm ${NIC}"

是相同的

代码语言:javascript
复制
"ifconfig_$Bridge=addm $NIC"

(不需要花括号,整个字符串可以由一组双引号引用)

由于使用双引号引用同一字符串的两个单独部分,ShellCheck想知道是否意味着引号的“内部对”是字面的,实际上是字符串的一部分,即是否意味着编写fconfig_"${Bridge}\"=\"addm ${NIC}"

因为您没有,所以最好像我前面展示的那样重写字符串,只是为了清楚地表明它是一个没有嵌入引号的字符串。

请注意,您的代码在这里的引用方面没有出错,而且ShellCheck只是询问您的意图,因为这是(可以说)一个常见的错误,当您确实希望字符串中包含文字双引号时。

如果您对引用字符串的方式有强烈的感觉,那么可以在受影响的行之前的注释中使用一个指令禁用ShellCheck警告:

代码语言:javascript
复制
# shellcheck disable=SC2140
sysrc ifconfig_"${Bridge}"="addm ${NIC}"

这基本上意味着“我知道我在做什么,并且规则SC2140不适用于这里,非常感谢。”

票数 10
EN

Unix & Linux用户

发布于 2020-12-26 23:06:15

如果你跟着建议的接2140解释链接,你得到了这条短信,

Problematic代码:

代码语言:javascript
复制
echo "" > file.html

代码语言:javascript
复制
export "var"="42"

Correct代码:

代码语言:javascript
复制
echo "" > file.html

代码语言:javascript
复制
export "var=42"

看第二个例子--它的结构与您的代码几乎相同

代码语言:javascript
复制
sysrc ifconfig_"${Bridge}"="addm ${NIC}"

你被告知的是检查双引号是否应该是字符串的一部分,或者你是否只需要额外的引号。在你的例子中,这是第二个选项,这行应该写成

代码语言:javascript
复制
sysrc "ifconfig_${Bridge}=addm ${NIC}"
票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/626241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档