如何在 linux cat 命令中一起处理单引号/撇号和 space?

How to handle single quote/ apostrophe and space together in linux cat command?

我在 test's dir 目录中有一个名为 test's file.txt 的文件。 所以文件路径变成 test's dir/test's file.txt。 我想 cat 文件的内容,但由于文件包含一个撇号和一个 space 它让我很难实现。 我尝试了几个命令,包括

  1. sh -c "cat 'test's dir/test's file.txt'"
  2. sh -c 'cat "test's dir/test's file.txt"'
  3. sh -c "cat '"'"'test's dir/test's file.txt'"'"'"
  4. sh -c 'cat "test\'s\ dir/test\'s\ file.txt"' 还有很多 ... 但其中 none 正在工作。

如果能提供一些帮助,我们将不胜感激。 谢谢!

您可以使用 here-doc:

sh -s <<-'EOF'
cat "test's dir/test's file.txt"
EOF

你要不要试试:

sh -c "cat 'test'\''s dir/test'\''s file.txt'"

至于路径名部分,它是以下的串联:

'test'
\'
's dir/test'
\'
's file.txt'

[编辑]
如果你想在python中执行shell命令,请你试试:

#!/usr/bin/python3

import subprocess

path="test's dir/test's file.txt"
subprocess.run(['cat', path])

或立即:

subprocess.run(['cat', "test's dir/test's file.txt"])

由于subprocess.run()函数将命令作为列表, 不是一个字符串(可能有 shell=True 选项),我们没有 担心命令周围的额外引用。

请注意 subprocess.run() 受 Python 3.5 或更新版本支持。

此选项避免了两级引用的需要:

sh -c 'cat -- "[=10=]"' "test's dir/test's file.txt"

参见。 (它也适用于 sh -c。)