Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite、bash脚本和连接运算符_Bash_Sqlite - Fatal编程技术网

SQLite、bash脚本和连接运算符

SQLite、bash脚本和连接运算符,bash,sqlite,Bash,Sqlite,我有一个SQLite数据库stuff.db(带有表notes(id整数主键、时间戳日期、注释文本);)。时间戳将自动触发 我想从命令行以快速而肮脏的方式填充它 因此,我编写了一个名为bashscript1的脚本,它如下所示: sqlite3 script.db 'insert into notes (note) values ("Stuff happens.");' 但我想保留这句话作为标准条目,如果有必要,更准确地说:我想添加可变信息,如:“Foo进入房间。”或“Bar拨打电话”。我们的想法

我有一个SQLite数据库stuff.db(带有表notes(id整数主键、时间戳日期、注释文本);)。时间戳将自动触发

我想从命令行以快速而肮脏的方式填充它

因此,我编写了一个名为bashscript1的脚本,它如下所示:

sqlite3 script.db 'insert into notes (note) values ("Stuff happens.");'
但我想保留这句话作为标准条目,如果有必要,更准确地说:我想添加可变信息,如:“Foo进入房间。”或“Bar拨打电话”。我们的想法是将这些字符串串在一起,并让它们出现:“事情发生了。富进入房间。”或“事情发生了。酒吧打电话。”

所以我重写了剧本:

echo "Do you want to add somme text ?"
read Str1
sqlite3 script.db 'insert into notes (note) values ("Stuff happens."||\"$Str1\");'
当然,我收到了一条错误信息。 我应该如何进行

提前谢谢


ThG

Shell变量在用单引号括起来时不会像现在这样展开。也许你想要:

sqlite3 script.db "insert into notes (note) values (\"Stuff happens.\"||\"$Str1\");"
附言。 我假设
|
是sqlite3语法的一部分,因为它肯定不是bash,至少在那种上下文中不是。如果不正确,请告诉我。

试试:

sqlite3 script.db "insert into notes (note) values ('Stuff happens.$Str1');"

请注意,如果您的
$Str1
包含一个引号,则此操作将中断。

谢谢您的回答,但我在sqlite中收到一条错误消息:错误:无法识别的令牌:“\”对不起,我是新的。。你说的编辑是什么意思?我希望我没有忘记什么。顺便说一句,在发送给sqlite之前,在bash中连接这两个字符串不是更好的解决方案吗?但我不知道怎么做…(与SiegeX相同的mesg)@ThG-我也有点新:)我编辑了我的答案-在我看来,单引号在我尝试的测试脚本中起作用,SQLite的语法要求字符串周围有单引号。我确认| |是SQLite中的连接运算符。但与sje397一样,我收到一条错误消息:error:unrecogned token:“\”@SiegeX:bash中的两个字符串在发送到sqlite之前连接起来不是更好的解决方案吗?但我不知道如何做到这一点…(与sje397相同的mesg)最好不要涉足报价汤业务,而是这样做:
sqlite3 script.db'插入notes(note)值(“发生了什么事。”| |““““$Str1””);'。我知道称之为“不加引号的汤”有点虚伪,但这是最可靠的方法。@Sorpigal:效果很好(但我必须承认我不理解单引号中嵌入双引号的逻辑…)。谢谢。ThG@ThG请看Sorpigal的行,其部分由单引号分隔。第一部分是
“插入到注释(note)值中(“填充发生了。”| |“”
。因为它在单引号中,是一个不能被shell扩展或更改的文本行,即双引号是文本。下一部分是
”$Str1“
被双引号包围,告诉shell继续并展开
$Str1
。最后,最后一部分是
'”;“
由于单引号,它还是一个文本字符串。此方法允许您手动打开和关闭shell展开。