我可以在for循环中使用bash括号扩展吗?

牧人

我的目录中有一些文件:touch dir1/dir2/bad\ name{1..4}我想将这些文件(bad name1 - bad name4)从dir2移到dir1,并立即重命名。由于这些文件的名称不正确,因此我将其简称为ls bad*现在按照我的意愿移动它们,我将尝试for i in $(ls *bad); do mv $i ../anothername{a..d}; done我要解决的问题是如何进行一对一的映射(在循环和扩展之间)-即

对于for循环的一次迭代,进行大括号的一次扩展

bad\ name故意放了进去,因为我可以这样做mv bad\ name{1..4} ../anothername{a..d},因此不需要for loop,因此也没有问题,但是我想将这些文件与file expansion *-一起使用ls bad*并将它们映射到for循环中brace expansiongnu brace expand)。是否可能,或者大括号无法在一次迭代中扩展for循环?因此,唯一的选择是在mv的两边都用大括号(如mv bad\ name{1..4} ../anothername{a..d}

0xC0000022L

我想在给定工具(Bash)的情况下,从易读性的角度来看,没有任何解决方案会真正简单明了。正如对问题的评论中概述的那样,您还可以设计一种仅适用于字符串(无数组)的方法。但是,阵列的优点是可以替换各种长度。

无论如何,这是我的示例(这echo是有意的,因此,如果有人粘贴并执行脚本,这不会立即开展业务):

#!/usr/bin/env bash
replacements="aabbccdd"
let step=2
let max=$((${#replacements}/step))
for ((i=1;i<=$max;i++)); do
    echo mv bad\ name$i ../anothername${replacements:$((i*step-step)):$step}
done

解释:

(经测试,发现它可以与Bash 4.4.20一起使用)

  • step 设置为单个替换的长度
  • replacements 持有一个字符串,我们将从中截取一些长度 step
  • C样式的for循环仅用i作数字索引变量
  • ${replacements:...:...} 执行单个替换
    • $((i*step-step))是一个算术表达式,该表达式似乎就是它的样子:i*step-step...在-step那里可以找到从零开始的字符串索引...
    • $step是我们从replacements琴弦上切下的每一块的长度

局限性:

  • 该代码假设我们要从1开始并连续上升到给定的最大值,当然可以对其进行调整
  • 该代码不再使用大括号扩展,尽管可以说可以通过eval...来完成,但是它对可读性没有帮助。
  • 此代码需要相同的替换长度(其他建议的数组解决方案没有此限制!)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以在Bash大括号扩展中使用变量吗?

我可以在vuejs循环中使用slot吗?

我可以在C ++中的for循环中使用指针吗?

我可以不在循环中使用调度组吗?

我可以在for循环中使用with语句吗?

我可以在 foreach 循环中使用 eloquent 模型吗

我可以在 for 循环中使用 if 语句吗

可以在for循环中使用lambda吗?

在我的循环中使用UPDATE吗?

我可以在一个循环中使用多个 for 循环吗?

我可以在一个循环中使用2个循环语句吗?

我可以在循环中使用itertools :: PutBack :: put_back吗?

我们可以在PHP的foreach循环中使用IterateAggregate或Iterator吗?

我可以在一个 while 循环中使用 2 个计数器吗?

我可以在Python的for循环中使用变量作为索引吗?

我可以在 for 循环中使用指针的位置/地址作为终止条件吗?

我可以在一个foreach循环中使用两组变量吗?

我可以删除 bash C 样式 for 循环中的 $ 吗?

可以在循环中使用相同的变量名吗?

可以在for循环中使用多个if语句吗?

可以在 *ngFor 循环中使用函数吗?

任何人都可以帮助我在 php 的 foreach 循环中使用 json 数据吗?

我可以在for循环中添加条件吗?

为什么我不能在这个 while 循环中使用括号?

我可以在Entity Framework SubQuery中使用扩展方法吗?

我可以在协议扩展中使用`inout`吗?

我可以在Firefox扩展中使用PHP脚本吗?

Swift - 我可以在通知服务扩展中使用领域吗?

我可以在扩展Thread的类中使用ArrayList吗?