Unix命令逃逸空间(Unix command to escape spaces)

2019-08-01 07:11发布

我是新来的shell脚本。 有人可以帮我命令逃跑用“\”的空间。 我有一个变量FILE_PATH = /路径/我的/文本文件,
我想逃避的空间独自FILE_PATH = /路径/到\我的/文\文件

我试着用TR -s命令,但它不帮助

FILE_PATH = echo FILE_PATH | tr -s " " "\\ " echo FILE_PATH | tr -s " " "\\ "

有人可以提出正确的命令!

Answer 1:

如果你使用bash,你可以使用它内置的printf的%Q格式(类型help printf在bash):

FILENAME=$(printf %q "$FILENAME")

这不仅报价的空间,同时也为所有外壳的特殊字符。



Answer 2:

还有更多的制作串不仅仅是逃避空间安全的,但你可以逃脱的空间:

FILE_PATH=$( echo "$FILE_PATH" | sed 's/ /\\ /g' )


Answer 3:

您可以使用“ 单引号 ”到包含空格的路径上运行:

cp '/path/with spaces/file.txt' '/another/spacey path/dir'

grep foo '/my/super spacey/path with spaces/folder/*'

在脚本:

#!/bin/bash

spacey_dir='My Documents'
spacey_file='Hello World.txt'
mkdir '$spacey_dir'
touch '${spacey_dir}/${spacey_file}'


Answer 4:

使用引号来保留空格字符

TR仅用于更换单个字符1 1似乎是,你需要SED。

echo $FILE_PATH | sed -e 's/ /\\ /'

似乎你想要做什么。



Answer 5:

你可以做到这一点sed

NEW_FILE_PATH="$(echo $FILE_PATH | sed 's/ /\\ /g')"


Answer 6:

FILE_PATH=/path/to my/text file
FILE_PATH=echo FILE_PATH | tr -s " " "\\ "

这第二条线必须

FILE_PATH=echo $FILE_PATH | tr -s " " "\\ "

但我不认为它很重要。 一旦你达到了这个阶段,你都来不及。 变量已定了,要不就是空间逃脱或变量不正确。

FILE_PATH =“/路径/我的/文本文件”



文章来源: Unix command to escape spaces
标签: linux shell unix