Команда Unix для выхода из пространства

Я новичок в shell script. Может кто-нибудь помочь мне с командой, чтобы избежать пробела с помощью "\". У меня есть переменная FILE_PATH =/path/в мой/текстовый файл,
Я хочу просто избегать пространств FILE_PATH =/путь/в\мой/текст\файл

Я попробовал команду tr -s, но не помогает

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

Может кто-нибудь предложить правильную команду!

Ответ 1

Если вы используете bash, вы можете использовать встроенный printf% q formatter (тип help printf в bash):

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

Это будет не только процитировать пробел, но и все специальные символы для оболочки.

Ответ 2

Там больше, чтобы сделать строку безопасной, чем просто экранирование пробелов, но вы можете избежать пробелов с помощью:

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

Ответ 3

Вы можете использовать "одинарные кавычки" для работы по пути, содержащему пробелы:

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

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

в script:

#!/bin/bash

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

Ответ 4

Используйте кавычки, чтобы сохранить символ пробела

tr используется только для замены отдельных символов 1 на 1. Кажется, что вам нужен sed.

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

Кажется, делать то, что вы хотите.

Ответ 5

Вы можете сделать это с помощью sed:

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

Ответ 6

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

Эта вторая строка должна быть

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

, но я не думаю, что это имеет значение. Как только вы достигли этого этапа, вы опоздали. Переменная была установлена, и пробелы экранированы или переменная неверна.

FILE_PATH = '/path/в мой/текстовый файл