微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将数组或字符串转换为有效路径的问题

如何解决将数组或字符串转换为有效路径的问题

我正在尝试制作一个功能,让我的生活更轻松地将图像转换为 pdf。我正在使用 img2pdf 这是一个 Python 脚本。我希望能够将文件和目录传递给我的函数(带有用于扩展的通配符,例如:directory/*)。

解决了 Windows 路径转换的问题,但现在意识到如果路径有空格,该函数将不起作用,或者到了 Python 只会在路径上出错的地步。

>

我尝试编写函数,创建一个包含所有文件的字符串:

imgtopdf(){
    list=""
    while [[ "$1" != "" ]] ; do
        list+=" '$(cygpath -w "$1")'" # Tried $(echo "$list" | xargs -0 echo) but it removes back-slashes!
        shift
    done
    list="${list:1}"
    echo $list
    img2pdf -o img2pdf.pdf --pagesize A4 $list
}

然后尝试使用数组来保存所有文件

imgtopdf(){
    list=()
    while [[ "$1" != "" ]] ; do
        list+="$(cygpath -w "$1")"
        shift
    done
    echo ${list[@]}
    img2pdf -o img2pdf.pdf --pagesize A4 ${list[*]}
}

注意:cygpath -w 负责将 /cygdrive/ 路径转换为 ​​Windows 路径,以便 Python 理解路径。

解决方法

引用很重要:使用"${list[@]}",而不是${list[*]}。冒着自我服务的风险,请参阅 https://stackoverflow.com/a/12316565/7552

此外,将元素附加到数组的语法需要括号(额外的空格是可选的):

list+=( "$(cygpath -w "$1")" )

bash 中检查变量的最佳方法是使用 declare -p list

imgtopdf() {
    list=()
    for file in "$@"; do
        list+=( "$(cygpath -w "$file")" )
    done
    declare -p list
    img2pdf -o img2pdf.pdf --pagesize A4 "${list[@]}"
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。