Linux

使用來自列表的名稱多次復製文件

  • October 10, 2018

我有一個名稱列表,我有一個二進製文件。我想複製該二進製文件,以便列表的每個成員都有一個副本。該列表是一個文本文件,每一行都有一個名稱。我不斷回到

for i in $(cat ../dir/file); do cp binaryfile.docx "$i_binaryfile.docx"; done

沒有錯誤。僅創建一個名為 _binaryfile.docx 的文件。

我看過這個$$ Copy-a-file-to-a-destination-with-different-names $$$$ duplicate-file-x-times-in-command-shell $$但我看不出它們有何不同。

它應該是:

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變數的名稱在_.

引用自:https://unix.stackexchange.com/questions/474559