Bash格式字符串。使用值替换占位符。

6
我希望使用Linux bash格式化字符串:
```bash ```
"<username>{0}</username><password>{1}</password>".format("user", "pass")

输出:

<username>user</username><password>pass</password>

这要用什么命令才正确呢?我可以使用其他通配符代替{0}{1}

这行代码是在文件中还是在变量中? - Cyrus
1
变量中的行 - Rudziankoŭ
3个回答

11

printf --help 中得知:

-v var    将输出分配给shell变量VAR,而不是在标准输出上显示

所以,你需要做的就是:

FMT='<username>%s</username><password>%s</password>'
printf -v VAR "$FMT" user pass

1
你可以强调用户也可以是一个变量,使用 printf "$FMT" $(whoami) 'passphrase' - Alexx Roche
抱歉给你点了个踩!@oguzismail 它确实有效!如果您编辑答案,请告诉我。那时我可以取消我的踩。 - thegreatcoder

7
尝试使用这种参数扩展方式:Shell参数扩展
TMPL="<username>\$U</username><password>\$P</password>"
REALNAME="Bobby"
REALPASS="Lamepass"

TMPL=${TMPL/\$U/${REALNAME}}
TMPL=${TMPL/\$P/${REALPASS}}
echo $TMPL

2
您正在使用的语法似乎是Python。除了安全方面的考虑之外,您可以直接调用Python:
var='"<username>{0}</username><password>{1}</password>".format("user", "pass")'
python3 -c "print($var)"

打印

<username>user</username><password>pass</password>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接