命令替换:找不到文件或命令

ste*_*wpf 3 shell shell-script quoting command-substitution

下面的脚本

#!/bin/bash
QUERY='select * from cdr;'
MYROWS=$("sqlite3 -list -nullvalue NULL -separator ',' /var/log/asterisk/master.db '${QUERY}'")
Run Code Online (Sandbox Code Playgroud)

给我

./bla.sh: row 35: sqlite3 -list -nullvalue NULL -separator ',' /var/log/asterisk/master.db 'select * from cdr;': file or directory not found
Run Code Online (Sandbox Code Playgroud)

如果我直接执行

sqlite3 -list -nullvalue NULL -separator ',' /var/log/asterisk/master.db 'select * from cdr;'
Run Code Online (Sandbox Code Playgroud)

那么它的工作原理。我想在错误消息中看不到引号中有一些错误。请注意,我需要周围的单引号

select * from cdr;
Run Code Online (Sandbox Code Playgroud)

感谢您对我做错了什么的任何提示!

Gil*_*il' 6

里面$(…)是一个带有通常语法的 shell 命令。您打算作为命令的整个代码段周围的双引号使其解析为单个单词,这是命令的第一个单词,因此它被解释为命令名称。

此外,您的引用$QUERY是不正确的:您需要在它周围加上双引号,以便扩展变量。

MYROWS=$(sqlite3 -list -nullvalue NULL -separator ',' /var/log/asterisk/master.db "${QUERY}")
Run Code Online (Sandbox Code Playgroud)