Bash
Shellcheck 批准將一個變數中的 2 個參數傳遞給 bash 腳本中的命令的方法
在 bash 腳本中,我呼叫了另一個程序,但我想使用命令行選項配置該程序。以下作品:
AREA_ARG="" if __SOME_SETTING__ ; then AREA_ARG=" --area us,ca " fi process_data -i /some/path $AREA_ARG
即 bash 要麼執行
process_data -i /some/path
,要麼process_data -i /some/path --area us,ca
.然而
shellcheck
抱怨!$ shellcheck test.sh In test.sh line 7: process_data -i /some/path $AREA_ARG ^-------^ SC2086: Double quote to prevent globbing and word splitting. Did you mean: process_data -i /some/path "$AREA_ARG" For more information: https://www.shellcheck.net/wiki/SC2086 -- Double quote to prevent globbing ...
我理解原理,但我希望/需要變數在空間上拆分,以便
process_data
獲得 2 個參數。這樣做的正確方法是什麼
bash
?
使用數組
這是您使用數組重寫的程式碼。也是一個工作範例(
ls
代替您的命令),並對變數使用正確的大小寫(編碼標准說大寫名稱是為系統保留的)。#!/bin/bash area_args=() if true ; then area_args=(-l -a) fi ls "${area_args[@]}"
對於您的特定案例,有一個更簡單的答案:
unset -v area if __SOME_SETTING__; then area="ca,us" fi process_data -i /some/path ${area+ --area "$area" }
如果由於某種原因您不能使用數組,並且您需要比上述實踐提供的更多控制,您可以考慮使用函式包裝器。
withOptionalArea() { if __SOME_SETTING__; then "$@" --area us,ca else "$@" fi } withOptionalArea process_data -i /some/path
…但這應該只在特殊情況下才有必要。
真的,使用數組。