首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数组或字符串转换为有效路径时出现问题

将数组或字符串转换为有效路径时出现问题
EN

Stack Overflow用户
提问于 2021-05-06 06:54:45
回答 1查看 54关注 0票数 0

我正在试着做一个函数,让我的生活更容易转换图像为pdf。我使用的是img2pdf,这是一个Python脚本。我希望能够将文件和目录传递给我的函数(带有扩展标记,如:directory/*)。

我解决了Windows路径转换的问题,但现在意识到,如果路径包含空格,或者Python会在路径上出错,那么该函数将无法工作。

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

代码语言:javascript
复制
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
}

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

代码语言:javascript
复制
imgtopdf(){
    list=()
    while [[ "$1" != "" ]] ; do
        list+="$(cygpath -w "$1")"
        shift
    done
    echo ${list[@]}
    img2pdf -o img2pdf.pdf --pagesize A4 ${list[*]}
}

注意:cygpath -w负责将/cygdrive/ path转换为Windows path,以便它能够理解路径。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-06 09:23:57

报价至关重要:使用"${list[@]}",而不是${list[*]}。冒着自私的风险,请参见https://stackoverflow.com/a/12316565/7552

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

代码语言:javascript
复制
list+=( "$(cygpath -w "$1")" )

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

代码语言:javascript
复制
imgtopdf() {
    list=()
    for file in "$@"; do
        list+=( "$(cygpath -w "$file")" )
    done
    declare -p list
    img2pdf -o img2pdf.pdf --pagesize A4 "${list[@]}"
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67409799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档