Bash - 存储数组的哪些元素未能执行某些命令

Bash - 存储数组的哪些元素未能执行某些命令
read -r -p "Enter the filenames: " -a arr

for filenames in "${arr[@]}"; do
   if [[ -e "${filenames}" ]]; then
        echo "${filenames} file exists (no override)"
   else
        cp -n ~/Documents/library/normal.py "${filenames}"
   fi
done

假设,我B.py D.py在一个文件夹中。

当我在同一文件夹中运行此脚本并写入A.py B.py C.py D.py(未定义数量的输入)
命名的文件时A.py C.py,已成功复制。

而对于B.py D.py,则分别显示B.py file exists (no override)D.py file exists (not override)

我想将元素存储which did workedwhich didn't work与主数组不同的数组中${arr[@]}

arr=('A.py' 'B.py' 'C.py' 'D.py')
didworked=('A.py' 'C.py')
notworked=('B.py' 'D.py')

我怎样才能做到这一点?有什么建议,请提出来。

答案1

只需将文件名附加到相应数组的正确位置即可:

#!/bin/bash
files=('A.py' 'B.py' 'C.py' 'D.py')
files_err=()
files_ok=()
for f in "${files[@]}"; do
   if [[ -e "$f" ]]; then
        echo "$f file exists (no override)"
        files_err+=("$f")
   else
        if cp -n ~/Documents/library/normal.py "$f"; then
            files_ok+=("$f")
        else
            # copy failed, cp should have printed an error message
            files_err+=("$f")
        fi
   fi
done

(我不会filenames在 for 中用作循环变量,它只是一个文件名(一次),而不是很多。)

相关内容