bash - 如何在 printf 中转义双引号内的双引号?

问题描述 投票:0回答:2

我想在 git 别名内的 printf 的第二个参数中为函数提供一个带空格的参数。

git config --global alias.foo '!a="C:\New folder"; printf "%s\n" "$(basename $a)"'
git config --global alias.foo '!a="C:\New folder"; printf "%s\n" "$(basename \"$a\")"'
git config --global alias.foo '!a="C:\New folder"; printf "%s\n" "$(basename "\""$a"\"")"'

git config --global alias.foo '!a="C:\New folder"; b=$(basename "$a"); printf "%s\n" "$b"'

前三个产量

New
。最后一个避免了这个问题并按预期产生
New folder
。如何在不使用附加变量的情况下编写别名?

bash quotes double-quotes
2个回答
1
投票

我会做什么:

git config --global alias.foo '!a="C:\New folder"; printf "%s\n" "\042$(basename $a)\042"'

参见

man ascii

中的八进制部分

0
投票

不要转义

$a
周围的双引号。

git config --global alias.foo '!a="C:\New folder"; printf "%s\n" "$(basename "$a")"'
© www.soinside.com 2019 - 2024. All rights reserved.