У меня есть переменная, значение которой я хочу передать в команду. Однако $ производит необычные результаты. Кажется, он действует как * и ищет все каталоги. Мой код:bash передавая значение в команду
"Please enter the test type: "
read test
result="pass"
search_result=`find ./logs/$test_2017_01_logs*/* -type f -name func_log -exec egrep $result {} \;`
echo "$search_result"
Я только хочу, чтобы найти суффикс каталога, который читался в пользователем, не все каталоги, которые это то, что делает мой код.
Возникает проблема из-за конкатенации переданного значения ($ test) и остальной части имени папки (_2017_01_logs *)?
Может также добавить кавычки '$ result', так что он не получает слово-раскол (со словами, выходящими за пределы первого, которые интерпретируются как дополнительные имена файлов). –
Я также предлагаю '-exec egrep -h -e '$ result"/dev/null {} + '- таким образом мы не запускаем' grep' больше времени, чем нам нужно, и (из-за предшествующий '-e') интерпретировать' result' как литеральную строку, даже если она начинается с тире. («-h» подавляет имена файлов на выходе, чтобы получить эквивалентное поведение для текущего использования, даже когда передано несколько имен, если вы хотите их, вытащите его). –
... '/ dev/null' там, потому что' grep' изменяет свое поведение в некоторых случаях на основании того, сколько файлов передано; наличие этого представления гарантирует, что вы получите последовательное поведение независимо от того, сколько результатов 'find' добавляет в командную строку, и означает, что если идиома повторно используется с' xargs', мы не получаем экземпляр, читающий stdin с реализацией который следует с помощью вызова в 0-результатах, найденном (IIRC, реализация MacOS является одним из них). –