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!
Так и должно быть:
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
что имя переменной заканчивается до _
.
У вас две проблемы в команде:
Первый уже описан @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