bash - 如何标记字符串并在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”结果。
解决方案
请尝试以下方法:
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=
运算符评估条件表达式时[[ .. ]]
,最好将pattern
orrule
放在运算符的右侧。 - 返回
1
或0
而不是true
或false
用于进一步计算将很方便。
希望这可以帮助。
推荐阅读
- django - 我无法在我的模板中呈现我的 url 它给了我错误呈现
- css - CSS 网格:网格间隙(排水沟)和网格线之间的关系
- ruby-on-rails - 在 Elastic Beanstalk 上将 Redis 与 Rails 结合使用
- mysql - 根据另一个表中的条件删除表条目
- c# - 字符串c#中的最后一个单词和第一个单词
- javascript - 猫鼬为每个 ajax 调用插入文档
- c# - Winform标签旋转属性?
- python - Discord.py - 检测机器人何时离线
- javascript - 尝试使用可选链接 (?.) 时出现语法错误
- python - Python:Selenium Pagination 仅将第 1 页保存到列表中,但不保存第 2、3 页等