从字符串变量[重复]当用于包含空格的参数不正确地分析

问题描述 投票:0回答:2

这个问题已经在这里有一个答案:

我有存储在各种命令的一些选项。不幸的是,每当有一个空格bash的对待,尽管字符串为变量分隔在引号之中。

我知道,它是用在bash阵列做的是正确的方法,但这种情况我遇到的是基于其在git的承诺部署代码传统脚本。不幸的是我必须留在字符串中变量的解决方案,这是做得很好,直到有必要在一个参数使用空间(采取例如一看,有--filter='- /logs/'参数。

示例脚本:

#!/bin/bash

RSYNC_OPTS="-r --delete --exclude .env --filter='- /logs/' --links"
mkdir a b
rsync $RSYNC_OPTS a b

我有以下错误:

未知过滤规则:` ' - ' rsync的错误:在exclude.c语法或使用错误(代码1)(927)[客户= 3.1.3]

据我了解,--filter='-后空间表现得像参数的分隔符,尽管在单引号中使用。

到现在为止我尝试:

  • 报价模式变量:${RSYNC_OPTS@Q}
  • 逸出RSYNC_OPTS可变空间或单引号
  • 更改单引号双的人

如何使bash的解释引号的字符串正确发送它作为变量的字符串时?我希望会有解决方案,不涉及改变RSYNC_OPTS比单一的文本字符串变量别的东西。

bash
2个回答
0
投票

"$RSYNC_OPTS"尝试(抑制通配符),还可以使用eval,如:

eval rsync "$RSYNC_OPTS" a b

3
投票

对于这样的情况时,bash阵列是适当的解决方案。

RSYNC_OPTS=(-r --delete --exclude .env --filter='- /logs/' --links)
rsync "${RSYNC_OPTS[@]}" a b
© www.soinside.com 2019 - 2024. All rights reserved.