2010-03-14 63 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,我知道我可以使用一個for循環迴路雖然行再算上了線這種方式,但我希望有一個簡單的解決方案類似WC

+0

你需要引用您的變量。 – 2010-03-19 16:16:45

回答

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 ${#} 

另外,如果你只是想計算多少nameTXT是「測試」,爲什麼不在mysql中呢?像select count($select) from $mysqlTable where nameTXT='tests';

+0

可能是因爲我不知道你可以:P但是是的,這是舊的代碼,但我不明白爲什麼wc -l在MYSQL變量內完成時工作,但它不在後面......哦,好吧,那麼只要我的計數:)謝謝! – Mint 2010-03-14 05:14:03

+0

@Mint:因爲如果你的變量沒有引號,那麼匹配'$ IFS'中任何內容的所有字符都被替換爲一個空格。 – 2010-03-14 05:24:56

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

TEST="$(wc -l <<< "$testMYSQL")" 
相關問題