Ответ 1
Если вы используете bash, вы можете использовать встроенный printf% q formatter (тип help printf
в bash):
FILENAME=$(printf %q "$FILENAME")
Это будет не только процитировать пробел, но и все специальные символы для оболочки.
Я новичок в shell script. Может кто-нибудь помочь мне с командой, чтобы избежать пробела с помощью "\".
У меня есть переменная FILE_PATH =/path/в мой/текстовый файл,
Я хочу просто избегать пространств
FILE_PATH =/путь/в\мой/текст\файл
Я попробовал команду tr -s, но не помогает
FILE_PATH = echo FILE_PATH | tr -s " " "\\ "
Может кто-нибудь предложить правильную команду!
Если вы используете bash, вы можете использовать встроенный printf% q formatter (тип help printf
в bash):
FILENAME=$(printf %q "$FILENAME")
Это будет не только процитировать пробел, но и все специальные символы для оболочки.
Там больше, чтобы сделать строку безопасной, чем просто экранирование пробелов, но вы можете избежать пробелов с помощью:
FILE_PATH=$( echo "$FILE_PATH" | sed 's/ /\\ /g' )
Вы можете использовать "одинарные кавычки" для работы по пути, содержащему пробелы:
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}'
Используйте кавычки, чтобы сохранить символ пробела
tr используется только для замены отдельных символов 1 на 1. Кажется, что вам нужен sed.
echo $FILE_PATH | sed -e 's/ /\\ /'
Кажется, делать то, что вы хотите.
Вы можете сделать это с помощью sed
:
NEW_FILE_PATH="$(echo $FILE_PATH | sed 's/ /\\ /g')"
FILE_PATH=/path/to my/text file
FILE_PATH=echo FILE_PATH | tr -s " " "\\ "
Эта вторая строка должна быть
FILE_PATH=echo $FILE_PATH | tr -s " " "\\ "
, но я не думаю, что это имеет значение. Как только вы достигли этого этапа, вы опоздали. Переменная была установлена, и пробелы экранированы или переменная неверна.
FILE_PATH = '/path/в мой/текстовый файл