如何从 bash 中的参数拆分函数?

How to split up function from arguments in bash?

我正在编写一个名为 safeDel.sh 的 bash 脚本,其基本功能包括:

对于单字母参数,我使用的是内置函数 getops,它工作正常。我现在遇到的问题是 'file' 参数。 'file' 参数应包含要移动到目录的文件列表,如下所示:

$ ./safeDel.sh file file1.txt file2.txt file3.txt

以下是我的程序开始的片段:

#! /bin/bash

files=("$@")
arg=""
echo "arguments: $arg $files" 

echo 语句显示如下:

$ arguments : file file

如何从必须移动到目录的文件中拆分文件参数?

这是一种可以满足您需求的方法:

#!/bin/bash

declare -a files="$@"
for fileToManage in ${files}; do
  echo "Managing ... $fileToManage"
done

但只有当您的文件名中没有 space 时它才有效,在这种情况下您需要做一些额外的工作。

如果您需要进一步的帮助,请告诉我。

假设 getopts 处理的选项已从命令行参数列表中移出,并且已进行检查以确保至少保留两个参数,此代码应执行所需的操作:

arg=
files=( "${@:2}" )

echo "arguments: $arg ${files[*]}"

files=( "${@:2}" ) 将第一个之后的所有命令行参数放入一个名为 files 的数组中。有关详细信息,请参阅 Handling positional parameters [Bash Hackers Wiki]

${files[*]} 扩展为 echo 参数内的 files 数组中的文件列表。要安全地扩展 files 中的列表以进行循环,或传递给命令,请使用 "${files[@]}"。参见 Arrays [Bash Hackers Wiki]