linux - 将变量传递到 BASH 函数时出现“未找到命令”,我是否引用错误?

标签 linux bash grep command-substitution

所以我有一个命令,基本上可以将一行添加到文件中,但前提是该行尚未在文件中。它使用 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/

相关文章:

java - 在 IntelliJ Idea 中,我的应用程序可以运行,但作为 jar 运行——不是因为 "Error: Could not find or load main class"

Linux Bash 脚本无法正确打印

linux - 在 Unix 中打印/替换 ALT 代码

bash - 使用 ffmpeg 的 bash 查找循环中的尴尬行为

linux - unix下文件转换为DAT

linux - 提取以字符串开头直到空格字符的文本

linux - 使用 pr533 jmrtd 和 pcsc-lite 在 phyflex i.MX6 上读取护照失败

linux - 如何使用一个命令 ssh 自动连接跳线或代理和服务器

bash - 如何获取包含一种模式但不包含另一种模式的所有文件的列表?