참조("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"

(중괄호는 필요하지 않습니다. 전체 문자열을 큰따옴표로 묶을 수 있습니다)

동일한 문자열의 두 개별 부분을 인용하기 위해 큰따옴표를 사용하고 있기 때문에 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"

두 번째 예를 살펴보십시오. 코드와 구조가 거의 동일합니다.

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

당신이 들은 것은 큰따옴표가 문자열의 일부여야 하는지 아니면 필요하지 않은 추가 큰따옴표가 있는지 확인하라는 것입니다. 귀하의 경우 이는 두 번째 옵션이며 이 줄은 다음과 같이 작성하는 것이 더 좋을 것입니다.

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

관련 정보