string - 解析命令行参数来处理 bash 中的文件列表?

标签 string bash list parsing

我想创建一个脚本,其中包含一些可选输入,其解析方式类似于this respone解释但还包含具有特定扩展名的文件列表。示例用法是

./myscript.sh -s 25 -q 0.2 *.txt

然后脚本会将 25 存储到 s 变量中,将 0.2 存储到 q 变量中,然后将单独处理所有 txt 文件的列表。这是我到目前为止所拥有的

#!/bin/bash -f

# set the default values
QMAX=0.2
PROFILESIZE=50

while [[ $# > 0 ]]
do
key="$1"
case $key in
    -q|--max_q)
    QMAX="$2"
    shift # past argument
    ;;
    -s|--profile_size)
    PROFILESIZE="$2"
    shift # past argument
    ;;
esac
shift # past argument or value
done

for var in "$@"
do
    if [[ $var == *".txt" ]]
    then
        # do something on for real on each file here
        echo $QMAX $PROFILESIZE $var
    fi
done

照原样,我可以通过注释掉 while 循环来使用默认值运行。如果不注释掉它,它会读取输入,并且没有任何内容可供 for 循环进行比较。我认为最好的选择是在 while 循环中创建文件列表,然后在 for 循环中使用它。我有什么想法可以做到这一点吗?

最佳答案

只需附加一个将参数存储到数组的 *) case。

*) files+=("$1") ;;

然后迭代文件而不是 $@:

for file in "${files[@]}" ; do

关于string - 解析命令行参数来处理 bash 中的文件列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30535035/

相关文章:

Java通过替换特殊字符来转换一组字符串

c# - url 西里尔字母编码问题(使用网页浏览器控制)

C语言。不使用空终止的字符串长度

bash - bash 中的递归斐波那契函数

python - 仅将 float 列表中的零更改为整数

c# - 反序列化 JSON 列表

string - 将单词转换为唯一标识符

IOS 将 URL 字符串转换为 NSString?

mysql - ERROR 1582 (42000) 调用 native 函数时参数计数不正确 'FROM_UNIXTIME'

linux - 如何在 linux 中压缩其中一个后立即批量删除同一文件夹中的 mp4 文件?