【发布时间】:2019-02-04 01:28:35
【问题描述】:
我正在尝试通过终端应用程序使用 OS X 10.12 附带的内置 Bash (3.2) 版本在 Mac OS X 10.12.5 机器上运行 shell (bash) 脚本。
我猜这里存在语法问题,但到目前为止,我一直无法让其中一个命令按预期执行。每次调用该命令时,它只是将命令回显到 shell,但不执行它。
脚本中存在的另一个命令执行没有问题,所以我猜这个问题与那里使用的单引号/双引号/括号有关。
该脚本来自我一直在学习 Bash 脚本的教程,因此我相信这在 Linux Bash shell 上可以正常工作,但我不想通过 Linux 使用它。
脚本是这样的..
#!/bin/bash
dbname="testdb"
table_layout="(id int not null auto_increment, primary key(id), name varchar(255), description text)"
action=$1
list_name=$2
name=$3
id=$3
desc=$4
if [[ $# -lt 1 ]]
then
echo "******************************"
echo "Task Application from tutorial"
echo "******************************"
echo ""
echo "Usage:"
echo "task (new-list)|del-list|add|del|ls)"
echo "new-list: Create a new list"
echo "del-list: Delete a list and all tasks inside the list"
echo "add: task add list_name task_name task_description - creates a new task"
echo "del: task del list_name task_id deletes a working task"
echo "ls: task ls - lists tasks, task ls list_name, lists tasks in a list"
echo ""
echo ""
fi
function create_list {
echo create table $list_name$table_layout | mysql $dbname
}
function add_task {
echo 'insert into "${list_name}" (name, description) values ("${name}","${desc}") | mysql $dbname'
}
但我遇到问题的命令是这个..(添加任务命令)
echo 'insert into "${list_name}" (name, description) values ("${name}","${desc}") | mysql $dbname'
我也尝试过像这样使用上面的行:
echo `insert into "${list_name}" (name, description) values ("${name}","${desc}") | mysql $dbname`
还有……
echo `insert into `${list_name}` (name, description) values ("`${name}`","`${desc}`") | mysql $dbname`
还有……
echo 'insert into '${list_name}' (name, description) values ("'${name}'","'${desc}'") | mysql $dbname'
(...与原始教程中包含的内容相匹配的最后一个)
我也通过 Homebrew 安装了 Bash 4.4,但结果是一样的。
如有任何建议,我们将不胜感激!
【问题讨论】:
-
你想要
echo "insert into \"${list_name}\" (name, description) values (\"${name}\",\"${desc}\")" | mysql "$dbname"? -
顺便说一下,请查看tour 了解有关网站运行方式的更多信息。欢迎!
标签: bash macos shell scripting quoting