所以我有一个命令,基本上可以将一行添加到文件中,但前提是该行尚未在文件中。它使用 grep 检查文件,如果不存在则附加到文件。
这样做的目的是因为我想从可能多次执行的安装脚本将所有别名导入到 BASH 中(并且我不想用相同的重复行填充 ~/.bashrc别名)。
该命令本身工作正常,但是当我尝试将其抽象为一个函数以在其他地方重用时,我收到错误:找不到命令。
到目前为止,我已经研究了 grep 和模式匹配(认为可能 & 或 ~ 抛弃了它)、参数扩展或命令扩展和引用。
我觉得是后者,即我没有正确引用别名字符串或文件字符串,并且它试图将其作为命令而不是字符串执行。
我在这个问题上已经费了好一阵子了,有人能帮我指出正确的方向吗?
感谢任何帮助!
# Command (which works)
grep -qxF 'alias gs="clear && git status"' ~/.bashrc || echo 'alias gs="clear && git status"' >> ~/.bashrc
# Wrap command in function so I can reuse and pass in different parameters
function append_unique_line {
grep -qxF $1 $2 || echo $1 >> $2
}
# Doesn't work.. append_unique_line: command not found
append_unique_line 'alias gs="clear && git status"' ~/.bashrc
最佳答案
尝试
function append_unique_line() {
grep -qxF "$1" "$2" || echo "$1" >> "$2"
}
append_unique_line 'alias gs="clear && git status"' ~/.bashrc
始终将变量包装在 "
中以进行扩展。
关于linux - 将变量传递到 BASH 函数时出现“未找到命令”,我是否引用错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62935724/