BASH从单词中删除特定标记[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我试图在给定的文件中找到最长的单词。在我检查每个单词的长度之前,我需要删除所有可能附加(一次或多次)单词的以下标记{,。:}。例如,对于这个文本:

:,猫狗,百科全书;去掉:。,

我需要结果:

猫狗百科全书删除

我正在尝试这个,但我得到一个“未找到命令”:

longest=0
for word in $(<$1)
do
    #new_word = $(echo "${word//[.,:]/}")
    new_word = "${word//[.,:]/}"
    len=${#new_word}

    if (( len > longest ))
    then
        longest=$len
        longword=$new_word
    fi
done
echo The longest word is $longword and its length is $longest.

谢谢。

bash
1个回答
0
投票

您使用参数扩展替换模式是正确的。

问题是在=(通常是任何shell)中声明变量时,bash周围不得有任何空格。

所以,以下应该工作:

new_word="${word//[.,:]/}"

顺便说一下,使用while read ...构造来循环文件中的行,使用for非常脆弱。

© www.soinside.com 2019 - 2024. All rights reserved.