这是我正在尝试运行的脚本
#!/bin/bash
charlist=$1 #possible input:cat
wordlength=$2 #possible input: 3
cat ./nounlist | egrep \b[${charlist}]\b{${wordlength}}
输出:没有。#应该抓住以下内容(使用命令行)
$ cat nounlist | egrep "\b[cat]{3}\b"
act
cat's_cradle
cat
cat-o'-nine-tails
cat's-paw
Sno-cat
act
act
act
act
rat-a-tat-tat
cat
cat's-claw
cat's_foot
cat's-ear
cat's-tail
cat's-ear
cat's_eye
基本上我正在尝试编写一个脚本,它接受两个参数(wordlist,wordlength)并获取名词列表中的所有单词,这些单词由wordlist中的char组成,并且具有wordlength变量的长度。我想知道的是如何将bash变量放在egrep的正则表达式中作为字符串?
谢谢!
答案 0 :(得分:3)
您需要将参数包装在双引号中,以便Bash不会尝试处理反斜杠,并在 {{1}之后将第二个\b
移动到 }:
{${wordlength}}
(如果您运行cat ./nounlist | egrep "\b[${charlist}]{${wordlength}}\b"
,则会看到它只打印echo \b
。这是因为Bash认为b
是为了阻止\
从有任何特殊意义;所以它删除它。)