【问题标题】:For loop working in terminal but not in shell scriptFor循环在终端中工作但不在shell脚本中
【发布时间】:2022-01-27 06:18:47
【问题描述】:

我正在尝试重命名文件。

$ls
1.jpg   12.jpg  15.jpg  18.jpg  3.png  6.jpg  9.png
10.jpg  13.jpg  16.jpg  19.jpg  4.jpg  7.png
11.jpg  14.jpg  17.jpg  2.jpg   5.jpg  8.jpg

对于文件{1..9}.*,从1.jpg01.jpg,与扩展名无关。 我在终端中尝试了以下for 循环,它运行良好。

$for i in {1..9}.*;do mv "$i" 0"$i";done

当我在 shell 脚本中编写相同的内容时,它不起作用。

#!/bin/sh
for i in {1..9}.*;do mv "$i" 0"$i";done

它给出了以下错误

mv cannot stat '{1..9}.*':No such file or directory

我认为 posix shell 不支持 {1..9}.* 语法。

问:在 posix 中 this 的等价物是什么?

-谢谢。

【问题讨论】:

  • 尝试将#!/bin/sh更改为#!/bin/bash

标签: bash shell sh


【解决方案1】:

您可以使用通配符模式[1-9].*

#!/bin/sh
for i in [1-9].*
do 
    mv "$i" 0"$i"
done

【讨论】:

    猜你喜欢
    • 2013-10-05
    • 2023-03-18
    • 2018-05-27
    • 2016-01-17
    • 1970-01-01
    • 2022-05-17
    • 2016-09-15
    • 2015-02-01
    • 2012-11-05
    相关资源
    最近更新 更多