Несколько раз скопируйте файл с именами из списка

Tengo la respuesta. Al menos, para Linux Mint.

No es un problema de software, es un problema de configuración.

Haga clic derecho en la barra de tareas. La mía es una tira de carbón en la parte inferior.

Luego haga clic en el botón solucionar problemas y expándalo.

Luego haga clic en restaurar todas las configuraciones a los valores predeterminados .

Eso es todo. Pasé varias horas investigando y experimentando antes de descubrir esto. Puedes hacerlo en menos de 20 segundos. ¡Buena suerte!

2
10.10.2018, 18:29
2 ответа

Так и должно быть:

for i in $(cat file); do cp binaryfile.docx "${i}_binaryfile.docx"; done

РЕДАКТИРОВАТЬ:

Вы можете воспроизвести это с помощью этого примера:

$ i=1
$ echo $i
1
$ echo $i_7

$ echo ${i}_7
1_7

Дело в том, что в переменной разрешен символ_(подчеркивания)имя. Вы можете прочитать об этом в man bash, но имейте в виду, что это написано очень техническим, лаконичным языком:

   name   A  word  consisting  only  of alphanumeric characters and underscores, and
          beginning with an alphabetic character or an underscore.  Also referred to
          as an identifier.

И далее:

A variable is a parameter denoted by a name.

И:

   ${parameter}
          The value of parameter is  substituted.   The  braces  are  required  when
          parameter  is  a  positional  parameter  with more than one digit, or when
          parameter is followed by a character which is not  to  be  interpreted  as
          part  of  its name.  The parameter is a shell parameter as described above
          PARAMETERS) or an array reference (Arrays).

Итак, если у нас есть переменная с именем iи мы хотим напечатать ее значение рядом с соседним _, мы должны заключить его в {}, чтобы сказать Bashчто имя переменной заканчивается до _.

2
27.01.2020, 22:08

У вас две проблемы в команде:

Первый уже описан @Arkadiusz Drabczyk answer:

Символ подчеркивания является допустимым символом для имен переменных, поэтому ваше имя переменной не заканчивается после $i. Вы должны использовать ${i}.


Вторая проблема :Вы не должны зацикливаться на строках файла, используя for line in $(cat file);.... Хотя в данном случае это может сработать для вас, в целом это очень плохая практика, так как будут разбиваться слова, а не строки.

Лучше использовать что-то другое, например.

xargs -a file -I{} cp binaryfile.docx "{}_binaryfile.docx"

или

while IFS= read -r i; do
    cp binaryfile.docx "${i}_binaryfile.docx"
done < file
0
27.01.2020, 22:08

Теги

Похожие вопросы