V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
happywowwow
V2EX  ›  问与答

问一个 shell 里的问题, 字符串消失了一个点?

  •  
  •   happywowwow · 2018-04-19 10:40:29 +08:00 · 1519 次点击
    这是一个创建于 2439 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想把 .flac 转成 .wav

    #!/usr/bin/env bash
    set -e
    
    find . -iname "*.flac" | while read f
    do    
        target=${f//flac/wav}
        echo ${f}
        echo ${target}
    done
    
    echo "###############################"
     
    find . -iname "*.flac" | while read f
    do  
        target=${f//flac/wav}
        echo ${f}
        echo ${target}
        ffmpeg -y -i "${f}" "${target}"
    done
    

    输出:

    ./Remember Me (Lullaby) - Gael García Bernal,Gabriella Flores,Libertad García Fonzi.flac
    ./Remember Me (Lullaby) - Gael García Bernal,Gabriella Flores,Libertad García Fonzi.wav
    ./Rewrite The Stars - Zac Efron,Zendaya.flac
    ./Rewrite The Stars - Zac Efron,Zendaya.wav
    ###############################
    ./Remember Me (Lullaby) - Gael García Bernal,Gabriella Flores,Libertad García Fonzi.flac
    ./Remember Me (Lullaby) - Gael García Bernal,Gabriella Flores,Libertad García Fonzi.wav
    ffmpeg version 3.4.2 Copyright (c) 2000-2018 the FFmpeg developers
      ......
      ......
    /Rewrite The Stars - Zac Efron,Zendaya.flac
    /Rewrite The Stars - Zac Efron,Zendaya.wav
    ffmpeg version 3.4.2 Copyright (c) 2000-2018 the FFmpeg developers
      ......
      ......
    /Rewrite The Stars - Zac Efron,Zendaya.flac: No such file or directory
    

    可以看到, 第二个循环里, 处理第二首歌, 那个 . 消失了?...

    如果我设置了 set -ex 可以看到是这样的

    第一个循环
    ...省略
    + read f
    + target='./Rewrite The Stars - Zac Efron,Zendaya.wav'
    + echo ./Rewrite The Stars - Zac Efron,Zendaya.flac
    ./Rewrite The Stars - Zac Efron,Zendaya.flac
    + echo ./Rewrite The Stars - Zac Efron,Zendaya.wav
    ./Rewrite The Stars - Zac Efron,Zendaya.wav
    ...省略
    第二个循环里
    ...省略
    + read f
    + target='/Rewrite The Stars - Zac Efron,Zendaya.wav'
    + echo /Rewrite The Stars - Zac Efron,Zendaya.flac
    /Rewrite The Stars - Zac Efron,Zendaya.flac
    + echo /Rewrite The Stars - Zac Efron,Zendaya.wav
    /Rewrite The Stars - Zac Efron,Zendaya.wav
    + ffmpeg -y -i '/Rewrite The Stars - Zac Efron,Zendaya.flac' '/Rewrite The Stars - Zac Efron,Zendaya.wav'
    ...省略
    

    都是一样的循环啊...

    两首歌名

    Remember Me (Lullaby) - Gael García Bernal,Gabriella Flores,Libertad García Fonzi.flac
    Rewrite The Stars - Zac Efron,Zendaya.flac
    
    5 条回复    2018-04-19 14:23:13 +08:00
    goofool
        1
    goofool  
       2018-04-19 10:55:01 +08:00
    什么点
    jasonyang9
        2
    jasonyang9  
       2018-04-19 11:02:07 +08:00
    @goofool #1 路径最前面那个表示当前工作目录的点

    我这边试了木有问题的,奇怪了
    happywowwow
        3
    happywowwow  
    OP
       2018-04-19 11:02:49 +08:00
    @goofool
    @jasonyang9

    ./Rewrite The Stars - Zac Efron,Zendaya.flac 变成了
    /Rewrite The Stars - Zac Efron,Zendaya.flac
    happywowwow
        4
    happywowwow  
    OP
       2018-04-19 13:40:31 +08:00
    @jasonyang9 也有尝试了, 浮现了. 可能得就是这两个歌名, 因为我之前处理的文件夹里有很多歌曲, 发现总是这里两首的时候过不去.
    happywowwow
        5
    happywowwow  
    OP
       2018-04-19 14:23:13 +08:00   ❤️ 1
    @goofool
    @jasonyang9
    搞定. 怀疑是 ffmpeg 用到了 stdin 吃了几个字符把.

    ```
    #!/usr/bin/env bash
    set -e

    for f in *flac; do
    target=${f//flac/wav}
    echo ${f}
    echo ${target}
    ffmpeg -y -stats -i "${f}" "${target}"
    done
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2555 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 03:09 · PVG 11:09 · LAX 19:09 · JFK 22:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.