如何从 bash 中的参数拆分函数?
How to split up function from arguments in bash?
我正在编写一个名为 safeDel.sh 的 bash 脚本,其基本功能包括:
- 文件 [文件 1、文件 2、文件 3...]
- -l
- -t
- -d
- -m
- -k
- -r 参数
对于单字母参数,我使用的是内置函数 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]。
我正在编写一个名为 safeDel.sh 的 bash 脚本,其基本功能包括:
- 文件 [文件 1、文件 2、文件 3...]
- -l
- -t
- -d
- -m
- -k
- -r 参数
对于单字母参数,我使用的是内置函数 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]。