Рейтинг:0

Не удается избежать пробелов в имени переменной

флаг cn

Я пытаюсь разобраться с пробелами в именах каталогов. Например:

драйв=/мнт/г; экспортный диск
mydir="$диск/каталог с пробелами в имени"
эхо "$mydir"

Результат:

/mnt/g/каталог с пробелами в имени

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

"/mnt/g/каталог с пробелами в имени"

как единственный аргумент для последующей обработки (перемещение, копирование или что-то еще). Я думал, что двойная кавычка делает свое дело. Очевидно нет. Bash продолжает есть двойные кавычки. Может ли кто-нибудь указать мне правильную процедуру обработки переменных со встроенными пробелами?

Я использую подсистему Windows для Linux в Windows 10, но Ubuntu 20.04 LTS имеет такое же поведение, поэтому я предполагаю, что то, что работает для одного, будет работать для обоих. (Может быть, что-то с ILS, IDK.)

флаг uz
Jos
С переменной `$drive` все в порядке. Это последующая команда, которая нуждается в работе, например. `mv $drive/myfile/backup/` должно стать `mv "$drive/myfile" /backup/`.
флаг hr
bash расширяет `"$mydir"` как *один* аргумент - если он "взорвется при использовании", то это из-за того, что вы делаете после (чего вы не показали)
Рейтинг:1
флаг cn

Your code is fine! You have spaces in variable that why will be spaces out of echo as well. So if you want to use a parameter that contains spaces you have to put between quotes like you do.

example:

command "${variable1}" "${variable2}"
Рейтинг:0
флаг ru

Если желаемый результат

"/mnt/g/каталог с пробелами в имени"

код, который вам нужен,

драйв=/мнт/г; экспортный диск
mydir="\"$диск/каталог с пробелами в имени\""
эхо "$mydir"
bac0n avatar
флаг cn
если вы хотите сохранить цитирование, вы обычно используете bash *operator* `${mydir@Q}`
kris44dad avatar
флаг cn
Вот часть, которую я не понимаю. Последующая команда «cd» (например) для этого каталога говорит, что слишком много аргументов. Bash анализирует пробелы. Это происходит во всех приведенных здесь примерах. mydir="\"$drive/directory с пробелами в имени\"" дает мне переменную с двойными кавычками, но при использовании по-прежнему анализирует пробелы. ${mydir@Q} дает мне одинарные кавычки, а "${mydir}" дает мне тот же результат, что и исходное сообщение. Кажется, я не могу передать в оболочку ни одного аргумента. Все они передают несколько аргументов при использовании.
флаг ru
Я не понял, что ты хочешь сделать. Вы хотите выполнить `cd` в `$mydir` из скрипта bash или хотите создать переменную окружения, чтобы выполнить команду `cd envVariable` в командной строке?

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

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