【问题标题】:How can I check if a variables holds 'nothing'如何检查变量是否“无”
【发布时间】:2015-08-04 02:05:34
【问题描述】:

我正在比较 csv 数据库和 PHP 表之间的信息。在某些情况下,PHP 表具有“空白”或“空”值。

如何确保我的if 语句中的比较实际上比较了两个值,而不是将一个值与“空白”值进行比较?

这是代码的sn-p

if [ "$CSV_PartDir" == "$PHP_PartDir" ] && [ "$CSV_PartName" == "$PHP_PartName" ]
then
    echo "MATCH:[$direction / $PHP_PartDir]  PN: [$part_name / $PHP_PartNam]"
    match=$((match+1))
elif [ "$CSV_PartDir" != "$PHP_PartDir" ] && [ "$CSV_PartName" != "$PHP_PartName" ]
then 
    echo "WRONG: [$direction / $PHP_PartDir]  PN: [$part_name / $PHP_PartNam]"
    mismatch=$((mismatch+1))
fi

这是一个示例输出:

MATCH:[OUT / OUT]  PN: [JSP-015123 / JSP-015123]
MATCH:[OUT / OUT]  PN: [02118 / 02118]
MATCH:[OUT / OUT]  PN: [02132 / 02132]
MATCH:[OUT / OUT]  PN: [JSP-015123 / JSP-015123]
MATCH:[OUT / OUT]  PN: [JSP-015123 / JSP-015123]
WRONG: [OUT / ]  PN: [02132 / ]
WRONG: [OUT / ]  PN: [02132 / ]
WRONG: [OUT / IN ]  PN: [OH-VPS-023 / JSP-01512 ] <--- a "legitimate" comparison to be define as "wrong"
WRONG: [OUT / ]  PN: [02132 / ]   <--- NOT a "legitimate" comparison to be define as "wrong"

问:是否有某种方法可以检查PHP_PartName 和/或PHP_PartDir 是否实际拥有一个值,而不是if 中的任何内容。

理想情况下如果我的 PHP 值和 CSV 值不匹配,我想打印出“错误”或“不匹配”。所以我想抑制空值。

【问题讨论】:

标签: bash text-processing


【解决方案1】:

阅读test 命令,特别是-z 测试为空,-n 测试为非空。

http://wiki.bash-hackers.org/commands/classictest

【讨论】:

    【解决方案2】:

    如果变量未设置或为空,请使用替换默认值的语法,并使用您要与之比较的变量的值作为默认值:

    if [ "${CSV_PartDir:-$PHP_PartDir}" = "${PHP_PartDir:-$CSV_PartDir}" ] && [ "${CSV_PartName:-$PHP_PartName}" = "${PHP_PartName:-$CSV_PartName}" ]
    

    因此,如果其中一个变量为空,它将默认为另一个变量,并且它们将匹配而不是说WRONG

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      • 2015-02-25
      • 2014-03-05
      • 2018-06-29
      相关资源
      最近更新 更多