コマンドの置き換え:ファイルまたはコマンドが見つかりません。

コマンドの置き換え:ファイルまたはコマンドが見つかりません。

次のスクリプト

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

私にください

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

自分で実行すると

sqlite3 -list -nullvalue NULL -separator ',' /var/log/asterisk/master.db 'select * from cdr;'

だとしたら大丈夫です。エラーメッセージに表示されない引用符にいくつかのエラーがあるようです。一重引用符が必要です。

select * from cdr;

何が間違っているのかについてのヒントをありがとうございます!

答え1

内部には、$(…)一般的な構文を使用するシェルコマンドがあります。コマンドで意図したフラグメント全体を二重引用符で囲むと、コマンドの最初の単語である単一の単語として解析されるため、コマンド名として解釈されます。

また、引用が$QUERY正しくありません。変数を拡張するには二重引用符が必要です。

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

関連情報