【问题标题】:Bash Script Evaluate String ProblemsBash 脚本评估字符串问题
【发布时间】:2012-08-08 08:00:59
【问题描述】:

我正在尝试创建一个脚本以使用 shell 自动从数据库中删除所有表。

注释掉的变量 $drop 工作正常,但是当我尝试在表中替换时

for table in $tables
do
    command="'drop table ${table}'"

    # drop=$(${login} -e 'drop table test') -- this works fine
    drop=$(${login} -e $command)
    echo $drop
    # echo -e "Removed table ${table}"
done

【问题讨论】:

  • 打开 shell 调试以查看 $command 使用了哪些值等。在循环之前添加 set -vx。要关闭,您可以使用set +vx。祝你好运。
  • 你好,我用这个得到了这些结果:+ for table in '$tables' + set -vx + command=''\''drop table property_thumbnail'\''' + for table in '$tables'@shellter

标签: mysql bash shell terminal


【解决方案1】:

(主要修改)

问题在于您使用引号。在您的代码中,由于您没有引用 $command,因此它会被 shell 分词。 $login 命令接收这些参数:"-e", "'drop", "table", "table_name'"——注意第二个和最后一个元素中的杂散单引号。

这样做:

command="drop table $table"
drop=$($login -e "$command")

【讨论】:

  • 嗯,我试过了,但还是有问题。我不认为 drop 应该是一个数组,而是从 $tables 数组中获取 $table 。当我使用上面显示的语法时,命令根本不显示?
  • 当前代码:`command="drop table ${table}" drop=("$login" -e "${command}") echo "${drop[@]}"` which打印出正确的命令,但实际上并没有运行该命令。当我尝试 $("${drop[@]}") 它显示错误“没有这样的目录”@glenn jackman
  • @JonMorehouse,我误解了你的问题——不清楚$login 是什么。我已经重写了我的答案。
猜你喜欢
  • 2013-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
相关资源
最近更新 更多