bash - Bash Shell 变量中的引号不起作用,为什么?

标签 bash shell

#!/bin/sh
LOG='log --pretty=format:"%h - %an, %ar : %s"'

git $LOG

我希望这能以指定格式输出实际的 git 日志。然而,我得到的只是一个致命的参数错误。

我也尝试了以下选项,但它们也不起作用:

LOG="log --pretty=format:\"%h - %an, %ar : %s\""
LOG='log --pretty=format:\"%h - %an, %ar : %s\"'

然而,奇怪的是下面的脚本确实有效,我不明白为什么:

LOG='--pretty=format:"%h - %an, %ar : %s"'
git log "$LOG"

有人认为 shell 认为变量只是一个参数,但是下面的工作正常:

LOG1LINE='log --pretty=oneline'
git $LOG1LINE

最佳答案

这是克服这个问题的一种方法。使用 bash 数组:

#!/bin/bash
#It's important to use bash instead of sh for this to work

LOG=(log --pretty=format:"%h - %an, %ar : %s")
git "${LOG[@]}"

关于bash - Bash Shell 变量中的引号不起作用,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17814246/

相关文章:

linux - Bash 脚本输出到文件从脚本失败但从 bash 工作

linux - 根据文件内容和模式匹配拆分文件

php - 使用 PHP 运行 Shell 脚本

shell - 如何从 Linux shell 脚本解析 YAML 文件?

arrays - 在 Bash 中循环遍历字符串数组?

linux - 尝试创建一个带有2个菜单的shell脚本来进行加法和减法

bash - 如何从命令行将每两行合并为一行?

bash - 如何在 Bash 参数中保留引号?

linux - "grep -q"有什么意义

linux - 在 Linux 上的 vi 编辑器中查找并替换字符串?