Unix命令来逃避空间

时间:2012-10-09 19:25:29

标签: linux shell unix

我是shell脚本的新手。有人可以用命令帮助我用“\”来逃避空间。 我有一个变量FILE_PATH = / path /到我的/文本文件,
我想独自逃离空间 FILE_PATH = / path / to \ my / text \ file

我尝试使用tr -s命令,但它没有帮助

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

有人可以建议正确的命令!!

7 个答案:

答案 0 :(得分:34)

如果您使用的是bash,则可以使用其内置printf的%q格式化程序(在bash中键入help printf):

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

这不仅会引用空格,还会引用shell的所有特殊字符。

答案 1 :(得分:10)

使字符串安全不仅仅是转义空格,而是可以通过以下方式转义空格:

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

答案 2 :(得分:7)

您可以使用'单引号'在包含空格的路径上操作:

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}'

答案 3 :(得分:2)

使用引号保留SPACE字符

tr仅用于替换单个字符1为1.似乎是您需要sed。

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

似乎做你想做的事。

答案 4 :(得分:1)

您可以使用sed

执行此操作
NEW_FILE_PATH="$(echo $FILE_PATH | sed 's/ /\\ /g')"

答案 5 :(得分:0)

在使用printf保护时,请不要忘记使用 eval

这是Codegen脚本在Xcode的“构建阶段”下的一个示例(以某种方式PROJECT_DIR不受空格保护,因此如果您的路径中包含空格,则构建失败):

PROJECT_DIR_GUARDED=$(printf %q "$PROJECT_DIR")
eval $PROJECT_DIR_GUARDED/scripts/code_gen.sh $PROJECT_DIR_GUARDED

答案 6 :(得分:-3)

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

第二行需要

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

但我不认为这很重要。一旦你到达这个阶段,你就太晚了。变量已设置,空格被转义或变量不正确。

FILE_PATH ='/ path / to my / text file'