【问题标题】:Cannot echo bash variable from single line command [duplicate]无法从单行命令回显 bash 变量 [重复]
【发布时间】:2018-06-12 03:27:22
【问题描述】:

我有以下文件名,我正在尝试将 v5.4b 重新标记为 v5.7

v5.4b_lvl-1.e8974326
v5.4b_lvl-1.o8974326
v5.4b_lvl-1.pe8974326
v5.4b_lvl-1.po8974326
v5.4b_lvl-2.1.e8974303
v5.4b_lvl-2.1.o8974303
v5.4b_lvl-2.1.pe8974303
v5.4b_lvl-2.1.po8974303
v5.4b_lvl-2.2.e8974304
v5.4b_lvl-2.2.o8974304
v5.4b_lvl-2.2.pe8974304
v5.4b_lvl-2.2.po8974304
v5.4b_lvl-3.1.e8974305
v5.4b_lvl-3.1.o8974305
v5.4b_lvl-3.1.pe8974305
v5.4b_lvl-3.1.po8974305
v5.4b_lvl-4.1.e8974327
v5.4b_lvl-4.1.o8974327
v5.4b_lvl-4.1.pe8974327
v5.4b_lvl-4.1.po8974327

我不能这样做 mv v5.4b_* v5.7_* 因为它认为 v5.7_* 是一个目录所以我正在尝试 for-loop 但我无法让它工作

我正在尝试来自此 SO 帖子 How to set a variable to the output of a command in Bash? 的推荐答案,但得到一堆空行。

我做错了什么?如何将cut 的输出保存到SUFFIX 以便mv $i v5.7_$SUFFIX

-bash-4.1$ for i in v5.4b*; do echo $i | SUFFIX=`cut -f2 -d'_'`; echo ${SUFFIX}; done

【问题讨论】:

    标签: bash unix for-loop filenames cut


    【解决方案1】:

    你把echo $i 放在了错误的地方。该命令的输出需要通过管道传送到cut 以使其读取任何内容,然后将结果分配给SUFFIX

    for i in v5.4b*
    do 
        SUFFIX=`echo $i | cut -f2 -d'_'`
        echo ${SUFFIX}
    done
    

    【讨论】:

    • for i in v5.4b*; do SUFFIX=echo $i | cut -f2 -d'_'; mv $i v5.7_${SUFFIX}; done NICE 谢谢
    【解决方案2】:

    如果您重命名实用程序,那么只需执行以下操作:

    rename -n 's/v5\4.b/v5.7/' v5.4b*
    

    PS:-n 用于试运行。您可以稍后将其删除以进行真正的重命名。

    如果rename 不可用,则使用:

    for i in v5.4b*; do
       echo mv "$i" "${i/v5.4b/v5.7}"
    done
    

    如果您对输出满意,请删除“echo”。

    【讨论】:

    • 我以后肯定会用这个。我不得不将另一个标记为正确,因为那是 questino 特有的,但非常感谢分享这个。我投了赞成票。
    猜你喜欢
    • 2018-04-22
    • 1970-01-01
    • 2021-11-19
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 2021-01-27
    • 2013-09-29
    相关资源
    最近更新 更多