Bash

只有一個文件從一組文件中回顯

  • August 18, 2019

我嘗試cp使用數組將 2 個或多個文件從一個目錄複製到另一個目錄。

我執行了:

files=(
   LocalSettings.php
   robots.txt
   .htaccess
   ${domain}.png
   googlec69e044fede13fdc.htm
)

用表格縮進的文件名;

我的目標是之後執行:

cp -a "source_path/${files[@]}" "/destanation_path"

我的問題是,在測試變數本身時,

echo $files只返回了第一個文件名LocalSettings.php,而不是完整的文件列表。

你會怎麼解釋這個?

相關:多行方式的 cp

它的Bash功能描述在man bash

引用不帶下標的數組變數等價於引用下標為 0 的數組。

如果要列印files數組的所有成員:

echo "${files[@]}"

也描述在man bash

${名稱

$$ @ $$} 將 name 的每個元素擴展為一個單獨的單詞。

$files並且${files[0]}是等效的,files例如您在問題中的列表。

請注意,僅在列表的第一個元素之前"source_path/${files[@]}"放置。source_path/要以使每個元素都以某個路徑為前綴的方式修改列表,您可以執行以下操作

files=( ... your list of files ... )

for element in "${files[@]}"; do
   files=( "${files[@]:1}" "source_path/$element" )
done

cp "${files[@]}" destanation_path

或者,您可以在執行cd,之前添加實際名稱的路徑,同時從一開始就分配列表中的值。source_path``cp

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