【发布时间】:2019-03-17 16:02:12
【问题描述】:
我目前有一个 bash 脚本,我想将要执行的命令与执行本身分开(出于可读性目的):
set -x
MAIN_COMMAND="mysql -u root \"select 1 from dual;\""
...
MAIN_RESULT=$($MAIN_COMMAND 2>&1)
执行命令时,我得到以下调试输出:
++mysql -u root '"select' 1 from 'dual;"'
显然,我转义字符串的方式有问题,但我无法确定。
此外,输出重定向不会连接到主命令。
【问题讨论】:
-
@tripleee:我在一个变量中搜索涉及
mysql的完全相同的副本。觉得有用。 -
做
cmd=(mysql -u root "select 1 from dual;"); result=$( "${cmd[@]}" 2>&1) -
您看到的额外引用正是外壳“规范化”其输出的方式。是的,这很难理解问题出在哪里,但是如果您确定在脚本中引用的内容是正确的,那么您可以假设显示的内容是正确的(抱歉,我无法从逻辑上解释它,但是有一个合乎逻辑的解释;-))。为了说服自己是这种情况,请使用
set -xactive 对命令进行一些试验。祝你好运。 -
@Inian 你的重复标记不包括问题的来源
-
@PaulRM:同意,但上下文是一样的
标签: bash quotes double-quotes quote quoting