参照 ("A"B"C") に対する ShellCheck 警告

参照 ("A"B"C") に対する ShellCheck 警告

単純なシェルスクリプトを作成していますが、スクリプトを確認するときhttps://www.shellcheck.net14行目でエラーが発生します。

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"
}

答え1

単一文字列

ifconfig_"${Bridge}"="addm ${NIC}"

同じですか?

"ifconfig_$Bridge=addm $NIC"

(中括弧は必要ありません。文字列全体を二重引用符で囲むことができます)

同じ文字列の2つの別々の部分を引用するために二重引用符を使用しているので、ShellCheckは引用符の「内部ペア」をリテラルであり、実際に文字列の一部として扱うことができるかどうかを知りたいと思います。書くfconfig_"${Bridge}\"=\"addm ${NIC}"

そうではないので、以前に示したように文字列を書き換えて、引用符を含まない単一の文字列であることを明確にすることをお勧めします。

ここでは、引用に関するコードで間違いを犯すのではなく、ShellCheckは意図について尋ねるだけです。する文字列にリテラル二重引用符を含めたいです。

文字列を引用する方法について強い感じがある場合は、次のことができます。障害を負うShellCheck警告には、影響を受けた行の前のコメントにディレクティブがあります。

# shellcheck disable=SC2140
sysrc ifconfig_"${Bridge}"="addm ${NIC}"

これは基本的に「私が何をしているのかを知っており、SC2140の規則はここには適用されません。本当にありがとう」を意味します。

答え2

フォローするとSC2140の提案された説明リンク、このような文字が来ます。

問題のコード:

echo "<img src="foo.png" />" > file.html

または

export "var"="42"

正しいコード:

echo "<img src=\"foo.png\" />" > file.html

または

export "var=42"

2番目の例を見てください。コードと構造はほぼ同じです。

sysrc ifconfig_"${Bridge}"="addm ${NIC}"

あなたが聞いたことは、二重引用符が文字列の一部でなければならないのか、それとも必要でない追加の二重引用符があることを確認することです。あなたの場合、これは2番目のオプションであり、この行は次のように書く方が良いでしょう。

sysrc "ifconfig_${Bridge}=addm ${NIC}"

関連情報