我如何才能将中间带有空格的字符串传递给终端?

我如何才能将中间带有空格的字符串传递给终端?

我试图让这段代码正常工作,但由于未知原因,它却运行不New正常New Folder,我该如何解决这个问题?

bash -c "echo ""hello world""; cd ${HOME}; cd Desktop; ls; mkdir ""New Folder"";echo ""Folder is Successfully created! """ > /dev/null 2>&1

答案1

双引号才不是在 Bash 中充当“转义”(就像在 CSV 或 VBScript 中一样)——相反,它的行为更像在 C 或 Python 中,你最终会得到几个连接在一起的字符串文字。

在 Bash(或 C 或 Python)中,每当您""在字符串中使用时,第一个"只会关闭引用的文字,而第二个"会打开一个新的文字。您最终会得到连接在一起的这些字符串:

"echo "
"hello world"
"; cd ${HOME}; cd Desktop; ls; mkdir "
"New Folder"
";echo "
"Folder is Successfully created! "
""

结果与以下相同:

"echo hello world; cd ${HOME}; cd Desktop; ls; mkdir New Folder;echo Folder is Successfully created! "

Bash 中的实际转义字符是反斜杠\,要写出文字双引号,你需要使用\"像这样:

"echo \"hello world\"; cd ${HOME}; cd Desktop; ls; mkdir \"New Folder\";echo \"Folder is Successfully created! \""

(您或许也应该使用cd \"\${HOME}\",或者cd ~/Desktop。)

答案2

您必须在双引号内使用单引号或转义双引号。此外,仅当上一个命令成功时才使用&& 而不是运行下一个命令:;

bash -c "echo hello world && cd ${HOME} && cd Desktop && ls && mkdir \"New Folder\" && echo Folder is Successfully created!"

相关内容