传递包含空格的shell变量作为参数

时间:2019-03-06 14:27:25

标签: python python-3.x shell gflags

变量DATASET_CONFIG中有一条动态路径

这是演示该问题的小代码

SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
RUN_SCRIPT="$SCRIPT_DIR/file.py"
DATASET_CONFIG="$SCRIPT_DIR/../dataset_config/ffhq.json"
hps_dataset="--dataset_config $DATASET_CONFIG --dataset_worker_num 16"
python_version="python3"

$python_version "$RUN_SCRIPT" \
$hps_dataset \
;

如您所见,我使用"$RUN_SCRIPT"代替了$RUN_SCRIPT,因为SCRIPT_DIR包含空格,但是我不能对$hps_dataset做同样的操作

2 个答案:

答案 0 :(得分:1)

您需要使用数组来存储数据集。我还建议您停止使用ALLCAPS变量名(here's why):

script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
run_script="$script_dir/file.py"
dataset_config="$script_dir/../dataset_config/ffhq.json"
hps_dataset=( --dataset_config "$dataset_config" --dataset_worker_num 16 )
python_version="python3"

"$python_version" "$run_script" "${hps_dataset[@]}"

使用此处显示的所有引号。

因为我们使用的是数组,所以不能使用/ bin / sh运行脚本。您必须明确使用bash或ksh(或zsh)

答案 1 :(得分:0)

您应该使用类似的东西

hps_dataset="--dataset_config \"$DATASET_CONFIG\" --dataset_worker_num 16"

对于bash中将来的变量,也都使用HPS_DATASET之类的大写字母。