Shell脚本创建带前导零编号目录异常问题求解
解决Shell脚本中{01..13}展开丢失前导零的问题
问题原因
脚本执行时使用的Shell与终端默认Shell不一致。比如脚本开头指定#!/bin/sh(POSIX标准Shell),而终端用的是bash——POSIX sh不支持带前导零的大括号序列扩展,bash则支持该特性,导致两种场景下执行结果不同。
解决办法
指定脚本用bash执行
修改脚本的Shebang行(第一行)为:#!/bin/bash之后脚本会调用bash运行,
mkdir -p test/file{01..13}就能正确生成带前导零的目录。兼容POSIX sh的写法(用seq命令)
如果需要脚本在纯sh环境下运行,可借助seq -w生成带前导零的编号,循环创建目录:for num in $(seq -w 1 13); do mkdir -p "test/file${num}" done-w参数会自动补零,让所有编号保持相同宽度。兼容POSIX sh的写法(用printf格式化)
通过printf将数字格式化为两位带前导零的字符串:for i in {1..13}; do num=$(printf "%02d" "$i") mkdir -p "test/file${num}" done%02d表示输出两位十进制数,不足两位时用零填充。
内容的提问来源于stack exchange,提问作者Morek Povíšil
相关产品推荐
相关产品推荐

