2012-08-11 144 views
1

我試圖創建一個腳本來自動使用shell從數據庫中刪除所有表。Bash腳本評估字符串問題

註釋掉變量$降工作正常,但是當我嘗試在表替代

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 
+0

打開外殼調試可以查看正在使用$命令什麼樣的價值觀,等等加上'你的循環之前設置-vx'。要關閉,你可以使用'set + vx'。祝你好運。 – shellter 2012-08-11 03:02:41

+0

您好,我使用了這個,並得到了以下結果:'+表'在'$ tables'中的表格 + set -vx + command =''''drop table property_thumbnail''''' + for table in'$ tables ''@shellter – JonMorehouse 2012-08-11 03:10:00

回答

1

(主要編輯)

的問題是與您的使用引號。在你的代碼中,由於你沒有引用$command它受到shell分詞的影響。 $ login命令接收這些參數:"-e", "'drop", "table", "table_name'" - 注意第二個和最後一個元素中的雜散單引號。

這樣做:

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

嗯,我試過了,仍然有問題。我不認爲drop應該是一個數組,相反,它需要$ tables數組中的$ table。當我使用上面顯示的語法時,該命令根本不顯示? – JonMorehouse 2012-08-11 03:27:41

+0

當前代碼:'\t命令= 「刪除表$ {表}」 \t \t下降=( 「$登錄」 -e 「$ {命令}」) \t \t回聲 「$ {下降[@]}」'其中打印出正確的命令,但不會真正運行該命令。當我嘗試$(「$ {drop [@]}」)時,它顯示錯誤「沒有這樣的目錄」@glenn jackman – JonMorehouse 2012-08-11 03:31:47

+0

@JonMorehouse,我誤解了你的問題 - 不清楚'$ login'是什麼。我改寫了我的答案。 – 2012-08-11 04:50:48