我有一个带有逗号分隔符的文本文件,如下所示
例如str_data.txt
aaa,111,bbb
ccc,222,ddd
eee,333,fff
我有一个bash函数来验证每个令牌(即,如果每个令牌都遵循某个规则或不基于该函数,则将返回true或false。(也可以使其像[[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”),最后根据AND的结果回答“ true”或“ false”每个令牌的结果。
您可以尝试以下操作,逐行读取并将值存储到数组中,然后迭代该数组,为每个值调用函数:
IFS=","
while read line
do
read -ra lineValues <<< "$line"
for value in "${lineValues[@]}"
do
validate_token "$value"
done
done < your_txt_file
请您尝试以下操作:
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"
由于多种原因,我还修改了您的功能。
name() { .. }
形式。local
化了它,不必关心变量名碰撞。==
或=
运算符评估条件表达式时在[[ .. ]]
中,最好将pattern
或rule
放置在运算符。1
或0
而不是true
或false
进行进一步的计算很方便。希望这会有所帮助。