【发布时间】:2017-10-15 13:04:36
【问题描述】:
我在将带有空格的参数从一个 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 时如何保留空格?
【问题讨论】:
-
"...我根本没有使用引号" 。那是一个错误。您需要(至少)用 dbl-quotes 包围所有变量名(
$VAR1),即。"$VAR1"。祝你好运。 -
不幸的是,将我作为参数传递的变量名称用引号括起来仍然没有保留空格。
-
空格前转义字符“\”?
标签: linux bash shell ssh quoting