如何使用 find 填充 Shell 脚本中的变量

如何使用 find 填充 Shell 脚本中的变量

我正在为一些无聊且重复的工作编写简单的 Shell 脚本。脚本正确地更改了目录,现在我想根据我在运行脚本时输入的参数运行其他脚本。其他脚本分散在子目录中,每个脚本都是唯一的。所以我想只插入文件名,然后让脚本找出该文件在哪个子目录中。

我尝试了这样的事情:

filename="default.ini"
while [ $# -gt 0 ] 
do
    case "$1" in
        -f) filename="$(find ./ -name $2)"; shift;;
        -*) echo >&2 \
            "usage: $0 [-v] [-f file] [file ...]"
            exit 1;; 
        *)  break;;     # terminate while loop
    esac
    shift
done

echo $filename

但是 find 没有返回任何结果,所以它保留下来default.ini。还有其他方法可以解决这个问题吗?

答案1

我认为这是解析选项的更惯用的方式:

filename="default.ini"
v_opt=false

while getopts :vf: opt; do
    case $opt in 
        f) find_out=$(find . -name "$OPTARG") 
           # do something with $find_out, such as checking if it's empty, or
           # if more than one file was found ...
           [[ $find_out ]] && filename=$(head -n 1 <<< "$find_out")
           ;;
        v) v_opt=true ;;
        ?) echo "usage: ..."; exit 1;;
    esac
done
shift $((OPTIND-1))

echo $filename

相关内容