如果我需要在 bash shell 中将“”放在“”内怎么办?

如果我需要在 bash shell 中将“”放在“”内怎么办?

我有一个shell脚本,其中有一个命令:

if [ -e "./${name}/\"$1\"_page.json" ];

我注意到与许多其他语言不同,它\"不起作用。

我应该怎么办?

答案1

使用三重双引号?

    if [ -e "./${name}/"""$1"""_page.json" ];

这会

  • ${name}将和替换$1为实际值。

请注意:

archemar@mybox:~/tmp7$ foo=bar
archemar@mybox:~/tmp7$ f2=deux
archemar@mybox:~/tmp7$ echo "${f2}/"""${foo}"""/test.php"
deux/bar/test.php
archemar@mybox:~/tmp7$ echo "${f2}/\"${foo}\"/test.php"
deux/"bar"/test.php

正如所指出的,您想要的结果有点不清楚。

答案2

只需使用单引号即可。

if [ -e './${name}/"$1"_page.json' ];

请注意,如果您想要${name}$1进行扩展,则不能使用单引号。阅读这篇文章,了解强引用和弱引用之间的区别。

但是,如果您想扩展参数,那么连接字符串是完全可以的:

if [ -e './'"${name}"'"'"$1"'"_page.json' ];

尽管许多'字符使得这几乎无法阅读。

相关内容