Рейтинг:0

Как «cd $variable», когда переменная пытается добавить «\» перед пробелами (путь содержит пробелы)?

флаг cn

Мой скрипт bash регистрирует свой собственный путь, чтобы он мог вернуться в свою папку после выполнения CD где-то (например, если он исследует другой лес и может переместить свой дом).

И если в пути есть пробелы, я использовал сед добавить \ перед каждым пробелом.

Но при использовании компакт-диск $SCRIPTPATH к этой переменной:

./newsed.sh: 11: cd: не могу перейти на /media/daniell/B/bkp/ST500LM012\

Источник: новости.sh:

#!/bin/bash -e

tmp="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
SCRIPTPATH="$(echo "$tmp" | sed 's/ /\ /g')"

эхо "$SCRIPTPATH"

лс
CD
лс
компакт-диск $SCRIPTPATH
лс

эхо $SCRIPTPATH выдает нормальный путь (/media/daniell/B/bkp/ST500LM012\ HN-M500MBB\ Dat/0/ok/Pendrive/flshdrive/0.Floflis-DNA/layers/soil) то, что я могу вручную скопировать и зайти в него, и работает; но когда CD' напрямую к переменной (компакт-диск $SCRIPTPATH) вылетает сразу после \.

флаг hr
* «И если в пути есть пробелы, я использовал sed для добавления \ перед каждым пробелом». * вы можете вообще избежать необходимости делать это, правильно заключая расширение переменной в кавычки ex. `cd "$ переменная"`
флаг cn
@steeldriver Спасибо, результат улучшился. Но: `./newsed.sh: 11: cd: не удается перейти к /media/daniell/B/bkp/ST500LM012\ HN-M500MBB\ Dat/0/ok/Pendrive/flshdrive/0.Floflis-DNA/layers / почва`?
флаг hr
Вы все еще избегаете пробелов с обратной косой чертой с помощью sed? Если да - не надо.
флаг cn
@steeldriver Попался! Большое спасибо. Если вы превратите свои комментарии в ответ, я отмечу его как правильный/лучший ответ.
waltinator avatar
флаг it
Не беспокойтесь об экранировании пробелов, просто укажите расширение переменной: `cd "$tmp"`.
Рейтинг:0
флаг cn

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

компакт-диск "$SCRIPTPATH"

буду работать.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.