«найти» удаление нескольких пробелов в bash - PullRequest
0 голосов
/ 01 апреля 2012

У меня есть строка в bash-скрипте, которая ищет папку, используя find, и сохраняет ее путь.

Строка выглядит следующим образом:

findfolder=$(eval echo $(eval "find "$HOME" -iname "$find_regex" -type d -print 2>/dev/null | sort -d | head -1" ))

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

Итак, если я ищу папку с именем "Моя музыка" с двумя пробелами между "Моей" и "музыкой", она вернет "Моя музыка" с один пробел.

Если я запускаю точно такую ​​же команду непосредственно в терминале, я получаю правильную папку.

Почему это происходит? (Дайте мне знать, если вам нужно больше кода. Не похоже, что уместно, так как я выполнил ту же самую команду из терминала, хотя. Не хотим стену текста без видимой причины, теперь мы).

редактирование:

Сейчас работает. Первый eval или echo (не уверен, но мои тесты показывают, что он был eval) вызывал свертывание вывода, удаляя «ненужный» интервал. Рабочий код:

findfolder="$(eval "find "$HOME" -iname "$find_regex" -type d -print 2>/dev/null | sort -d | head -1" )"

1 Ответ

3 голосов
/ 01 апреля 2012

Я не понимаю, что вы пытаетесь сделать с помощью заявлений eval.Однако вы можете поэкспериментировать с цитированием подстановки команд.Обратите внимание на разницу между следующими двумя командными строками:

# the two spaces between foo and bar are collapsed
echo $( echo "foo  bar" )

# the two spaces between foo bar bar are kept
echo "$( echo "foo  bar" )"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...