代码之家  ›  专栏  ›  技术社区  ›  O.rka

无法从单行命令[重复]中回显bash变量

  •  0
  • O.rka  · 技术社区  · 6 年前

    我有以下文件名,我正在尝试重新标记 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 但我不能让它工作

    我在试着从这篇文章中得到推荐的答案 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
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   dbush    6 年前

    你有 echo $i 在错误的地方。该命令的输出需要通过管道传输到 cut 如果要读取任何内容,则将结果分配给 SUFFIX 以下内容:

    for i in v5.4b*
    do 
        SUFFIX=`echo $i | cut -f2 -d'_'`
        echo ${SUFFIX}
    done
    
        2
  •  1
  •   anubhava    6 年前

    如果重命名实用程序,请执行以下操作:

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

    附言: -n 用于干运行。您可以稍后删除它以进行真正的重命名。

    如果 rename 不可用,请使用:

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

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