d=${c//[^$b]}如何计算字母$b在$c中的出现次数

  • 本文关键字:计算 何计算 bash shell
  • 更新时间 :
  • 英文 :

#!/bin/bash
echo "The program checks the number of indicated letters"
echo "Enter the file name and path"
read a
c=$(cat $a)
echo "
Enter which letter is to be found. for examle 'a' "
read b
d=${c//[^$b]}
echo "The number of occurrences of the character is: " ${#d}

我不明白这条线是怎么工作的:d=${c//[^$b]}。程序运行良好,我只是不明白表达式[^$b]是如何工作的。我已经读到表达式[^...]匹配不在括号中的任何字符。

例如,如果用户输入字符"a",他将在指示的文件中找到该字母的出现次数。有人能帮我解释一下这是怎么回事吗?因为[^...]的定义完全不同。

我发现了这样一个定义:"[^d]"匹配除b到d范围内的字符之外的任何字符。所以,如果文件中有一串句子,包含但不应该这样显示,除非我误解了什么。

${s//x}删除变量s值中出现的所有x[x]将匹配列表中的任何字符(该列表仅包含单个字符,因此将只匹配"x")。CCD_ 10匹配除"之外的所有字符;x〃;。

因此${a//[^x]}将只离开";x〃;值中的个字符。${#v}给出变量中的字符数。由于只有";x〃;字符留在变量中,这将为您提供这些字符的数量。

也可以通过调用外部程序来实现同样的目的,而不仅仅依赖bash变量扩展(IMO更简单,更清楚地表达了意图):

echo "The number of occurrences of the character is: $(grep -oe "[$b]" "$a" | wc -l)"

相关内容

  • 没有找到相关文章

最新更新