首页 > 解决方案 > 如何标记字符串并在bash中的每个标记上调用函数?

问题描述

我有一个带有逗号分隔符的文本文件,如下所示

例如 str_data.txt

aaa,111,bbb
ccc,222,ddd
eee,333,fff

我有一个 bash 函数来验证每个令牌(即,如果每个令牌是否遵循某个规则或不基于该函数将回显真或假。(也可以像 [[ XYZ == "$1"]] 一样保留它,而不是返回回声))

例如

function validate_token {
  local _rule = XYZ
  if [[ XYZ == "$1" ]]; then
    echo "true"
  else
    echo "false"
  fi
}

我想编写一个 bash 脚本(单行或多行)来分别验证所有这些令牌(即 validate_token “aaa” 然后 validate_token “111”),最后根据每个令牌的 ANDing 回答“true”或“false”结果。

标签: bashshellscripting

解决方案


请尝试以下方法:

validate_token() {
    local rule="???"    # matches a three-chraracter string
    if [[ $1 == $rule ]]; then
        echo 1
    else
        echo 0
    fi
}

final=1                 # final result
while IFS=',' read -ra ary; do
    for i in "${ary[@]}"; do
        final=$(( final & $(validate_token "$i") ))
        # take AND with the individual test result
    done
done < "str_data.txt"

(( $final )) && echo "true" || echo "false"

由于几个原因,我还修改了您的功能。

  • 定义 bash 函数时,name() { .. }首选形式。
  • 不推荐使用下划线开头的用户变量名。您已经local对其进行了化,不必关心变量名冲突。
  • 在使用==or=运算符评估条件表达式时[[ .. ]],最好将patternorrule放在运算符的右侧。
  • 返回10而不是truefalse用于进一步计算将很方便。

希望这可以帮助。


推荐阅读