2010-03-14 7 views
1

Мой проблематичной код:Как получить количество строк из переменной (из запроса MYSQL)?

testMYSQL=`mysql -u $mysqlUser -p$mysqlPass -h $mysqlHost --skip-column-names --batch -D $mysqlDB -e "SELECT $select FROM $mysqlTable WHERE nameTXT='test';"`  

$ testMYSQL теперь содержит:

test 
test 
test 

Тогда я:

TEST=$(echo $testMYSQL | wc -l) 
echo "$TEST" 

я бы мысли, что будет работать, но это не так, он возвращает 1

Но если я поместил это в $ testMYSQL: "test \ ntest \ nt est "он скажет 3 ...

Что здесь происходит? MYSQL не использует новые строки?

PS Я знаю, что могу использовать цикл для цикла, хотя линии затем подсчитывать строки таким образом, но я надеялся на более простое решение, как туалет

+0

Вы должны процитировать переменную. –

ответ

2

использовать $() синтаксис всякий раз, когда возможный

$ testMYSQL=$(mysql -u $mysqlUser -p$mysqlPass -h $mysqlHost --skip-column-names --batch -D $mysqlDB -e "SELECT $select FROM $mysqlTable WHERE nameTXT='test';") 
$ set -- $testMYSQL 
$ echo ${#} 

также, если вы просто хотите подсчитать, сколько именTTT это «тест», почему бы не сделать это в mysql? что-то вроде select count($select) from $mysqlTable where nameTXT='tests';

+0

Возможно, потому что я не знал, что вы могли бы: P Но да, это был старый код, но я не понимаю, почему wc -l работает, когда он выполняется внутри переменной MYSQL, но это не последнее ... о, ну, так долго, как я получаю счет :) Спасибо! – Mint

+0

@Mint: Потому что, если у вас нет кавычек вокруг вашей переменной, все символы, которые соответствуют чему-либо в '$ IFS', заменяются одним пробелом. –

2
TEST="$(echo "$testMYSQL" | wc -l)" 

или

TEST="$(wc -l <<< "$testMYSQL")"