我在将带有空格的参数从一个bash脚本传递到另一个将通过ssh远程运行的bash脚本时遇到麻烦。 我有一个脚本,create-node.sh看起来像这样:
# create-node.sh
#!/bin/bash
function set_node_env_variables {
docker-machine ssh remote-machine 'bash -s' < ./set-env-variables.sh \
$ENV_VARIABLE_ONE \ # "foo bar"
$ENV_VARIABLE_TWO \ # feefi
$ENV_VARIABLE_THREE \ # "fo fum"
$ENV_VARIABLE_FOUR # huffpuff
}
create-node.sh将参数传递给set-env-variables.sh,后者使用ssh远程运行,如下所示:
# set-env-variables.sh
#!/bin/bash
i=0
argv=()
for arg in "$@"; do
argv[$i]="$arg"
i=$((i + 1))
done
echo "export ENV_VARIABLE_ONE=${argv[0]}" >> /root/.profile #expected: "foo bar"; actual: foo
echo "export ENV_VARIABLE_TWO=${argv[1]}" >> /root/.profile #expected: feefi; actual: bar
echo "export ENV_VARIABLE_THREE=${argv[2]}" >> /root/.profile #expected: "fo fum"; actual: feefi
echo "export ENV_VARIABLE_FOUR=${argv[3]}" >> /root/.profile #expected: huffpuff; actual: fo
带空格或特殊字符的环境变量在双引号中存储,该机器将使用ssh执行set-env-variables.sh,否则我根本不使用双引号。
如果我正在使用ssh远程执行set-env-variables.sh,如何将参数从create-node.sh传递到set-env-variables.sh时如何保留空格?