2015-04-16 2 views
1

Приводимые ниже код выполняет поиск каталогов, которые имеют файл update_csgo.txt в, записывает его в массив и выводит массив:PRINTF печатает слишком много информации из массива каталогов в Баш

#!/bin/bash 

mapfile -t updates < <(find /home/tcagame/ -type f -name "update_csgo.txt") 
printf "'%s' \n"${updates[@]}"" 

Вот выход я получаю:

'/home/tcagame/8frag/6/update_csgo.txt' 
/home/tcagame/update_csgo.txt'/home/tcagame/user/3/update_csgo.txt' 
/home/tcagame/update_csgo.txt'/home/tcagame/user/5/update_csgo.txt' 
/home/tcagame/update_csgo.txt'/home/tcagame/user/4/update_csgo.txt' 
/home/tcagame/update_csgo.txt'/home/tcagame/user/7/update_csgo.txt' 
/home/tcagame/update_csgo.txt'/home/tcagame/user/8/update_csgo.txt' 
/home/tcagame/update_csgo.txt'/home/tcagame/user/2/update_csgo.txt' 
/home/tcagame/update_csgo.txt 

Где это /home/tcagame/update_csgo.txt взялось? Какой был бы лучший способ удалить это?

+0

Помните это поведение. Цитированные переменные массива 'printf' будут работать по назначению. Однако 'printf '% s \ n" $ {updates [@]} 'также стоит запомнить, так как это гладкий способ распечатать все значения в массиве, соответствующие вашей строке формата, без необходимости цикла. –

ответ

1

У вас есть дополнительные кавычки:

printf "'%s' \n"${updates[@]}"" 
           ^^ 

Удаление их делают работу (возможно, вы всегда можете процитировать переменный себя обрабатывать имена файлов с пробелами правильно):

printf "'%s' \n" "${updates[@]}" 
+0

Спасибо :), извините за ошибку noob. – Infinite

+0

Нет проблем, мы все здесь учащиеся :) – fedorqui

Смежные вопросы