我在尝试构建一个脚本来对 10 个不同单词的多个文件执行 grep 操作时遇到了这个问题。
我创建的脚本是(缩小的)
#!bin/bash
alias grep='grep -n'
out=`grep word $1`
输出
some text word
some other text word more text
grep 确实有效,但不考虑别名。它只输出匹配的行而不是行号(-n
用于行号)
现在如果我运行下面的命令,它工作正常
#!bin/bash
out=`grep -n word $1`
上述脚本的输出和预期输出:
233: some text word
532: some other text word more text
我在脚本的很多地方都有 grep 语句,我不想去编辑每一行。我希望通过别名来覆盖 grep 一次,但它似乎不起作用。
这里可能有什么问题?我怎样才能使别名起作用?
答案1
你忘记了这一行:
shopt -s expand_aliases
例如
#!/bin/bash
shopt -s expand_aliases
alias grep='grep -n'
out=$(grep word "$1")
echo "$out"
答案2
问题是您为实际 shell 创建了别名。当您使用反引号(或$(...)
)时,您运行的子 shell 会忽略您的别名(据我所知,别名无法导出,因此您必须在子 shell 中重新定义它们)。
对于您的情况,也许最好的方法是设置一个包含命令的变量。说:
MY_GREP="grep -n"
out=`${MY_GREP} word $1`