Shell-Script
關於引用的 ShellCheck 警告 (‘A’B’C’)
我正在編寫簡單的 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" }
單弦
ifconfig_"${Bridge}"="addm ${NIC}"
是相同的
"ifconfig_$Bridge=addm $NIC"
(不需要大括號,整個字元串可以用一組雙引號引起來)
由於您使用雙引號來引用同一字元串的兩個單獨部分,ShellCheck 想知道您是否可能意味著引號的“內部對”是文字的並且實際上是字元串的一部分,即您是否打算編寫
fconfig_"${Bridge}\"=\"addm ${NIC}"
.既然你沒有,最好像我之前展示的那樣重寫字元串,只是為了清楚地表明它是一個沒有嵌入引號的單個字元串。
請注意,關於此處的引用,您的程式碼沒有出錯,並且 ShellCheck 只是詢問您的意圖,因為當您確實需要在字元串中包含文字雙引號時,這(可以說)是一個常見錯誤。
如果您對引用字元串的方式有強烈的感覺,那麼您可以在受影響的行之前的註釋中使用指令禁用ShellCheck 警告:
# shellcheck disable=SC2140 sysrc ifconfig_"${Bridge}"="addm ${NIC}"
這基本上意味著“我知道我在做什麼,規則 SC2140 不適用於這裡,非常感謝。”