【问题标题】:How to get line count from variable (from MYSQL query)?如何从变量中获取行数(来自 MYSQL 查询)?
【发布时间】:2010-03-14 04:54:50
【问题描述】:

我有问题的代码:

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\ntest" 中,它会说 3…

这里发生了什么? MYSQL 不使用新行吗?

PS,我知道我可以使用 for 循环来循环遍历行,然后以这种方式计算行数,但我希望有一个更简单的解决方案,例如 wc

【问题讨论】:

  • 你需要引用你的变量。

标签: linux bash shell newline


【解决方案1】:

尽可能使用$() 语法

$ 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 是“test”,为什么不在 mysql 中做呢?类似select count($select) from $mysqlTable where nameTXT='tests';

【讨论】:

  • 可能是因为我不知道你可以 :P 但是是的,这是旧代码,但我不明白为什么 wc -l 在 MYSQL 变量中工作但它没有稍后……哦,好吧,只要我算上 :) 谢谢!
  • @Mint:因为如果你的变量没有引号,那么与$IFS 中的任何内容匹配的所有字符都将替换为一个空格。
【解决方案2】:
TEST="$(echo "$testMYSQL" | wc -l)"

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

【讨论】:

    猜你喜欢
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 2017-10-16
    • 1970-01-01
    • 2015-01-20
    • 2017-01-20
    相关资源
    最近更新 更多