Bash脚本使用新行传入变量

时间:2015-09-16 09:55:57

标签: bash

我有一个在多个数据库上运行mysql查询的脚本。我记录了运行到文件的查询。当我传入查询时它包含新行,但在日志文件中它全部在一行上。多行查询更易于阅读。

e.g:

$ sh run_query.sh 'CREATE TABLE`table` ( 
`id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
`field1` int(10) unsigned NOT NULL, 
`field2` int(10) unsigned NOT NULL, 
PRIMARY KEY (`id`), 
 ENGINE=InnoDB;'

bash是否可以将新行保留在传递的变量中?

2 个答案:

答案 0 :(得分:1)

在您的评论中,您提到使用此代码:

echo $sql >> logfile

但是,这会导致shell将$sql值中出现的任何换行符视为空格,以将该字符串分隔为echo的多个参数。你需要引用扩展:

echo "$sql" >> logfile

答案 1 :(得分:0)

您可以将多行字符串存储在变量中,如下所示:

IFS= read -rd '' sql <<'EOF'
CREATE TABLE`table` ( 
`id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
`field1` int(10) unsigned NOT NULL, 
`field2` int(10) unsigned NOT NULL, 
PRIMARY KEY (`id`), 
ENGINE=InnoDB;
EOF

然后传递给:

sh run_query.sh "$sql"