У меня есть строка в сценарии bash, которая ищет папку с помощью find
и сохраняет ее путь.«найти» удаление нескольких пробелов в bash
линия выглядит следующим образом:
findfolder=$(eval echo $(eval "find "$HOME" -iname "$find_regex" -type d -print 2>/dev/null | sort -d | head -1"))
и она работает практически в любом случае, но по какой-то причине, если я ищу папку, которая имеет два места в нем, он будет возвращать путь где все двойные пространства были отключены для одиночных пробелов.
Так что, если я ищу папку под названием «Моя музыка» с двумя пробелами между «My» и «музыка», он будет возвращать «Моя музыка» одним пробелом.
Если я запускаю ту же самую команду непосредственно в терминале, я получаю правильную папку.
Почему это происходит? (Дайте мне знать, нужен ли больше кода. Не кажется актуальным, так как я запускал ту же самую команду из терминала. Не хочу, чтобы стена без видимой причины теперь была нами).
редактировать:
Он сейчас работает. Первый eval или echo (не уверен, но мои тесты показывают, что это был eval) приводило к сбою вывода, удаляя «ненужный» интервал. Рабочий код:
findfolder="$(eval "find "$HOME" -iname "$find_regex" -type d -print 2>/dev/null | sort -d | head -1")"
Интересно. Но вам нужен двойной $ ($()) и evals? –
@ PéterVarga Ну, я не работал, пока не использовал eval. Они исправили проблему с назначением выводов переменной с использованием эха. – keyser
@ PéterVarga Теперь я решил это. Первый eval и echo не нужны, и это приводит к краху. Странно, что я в какой-то момент обнаружил, что они были необходимы – keyser