我写了这个脚本 exif_脚本 并想将 ep 变量更改为两位数,例如 01 而不是 1。
#!/bin/bash
x=0
ep=1
while [ $x -le 11 ]
do
echo "Welcome $x times"
date --date="$x week" +"%Y:%m:%d"
exiftool -exififd:dateTimeOriginal="$(date --date="$x week" +"%Y:%m:%d") 00" $1$ep*
x=$(( $x + 1 ))
ep=$(( $ep + 1 ))
done
答案1
您可以使用shell 参数扩展在数字中添加零填充。
例如,以 5 位数字格式打印数字:
$ zeroos="00000"
$ number="123"
$ temp_num="$zeroos$number"
$ echo "${temp_num:(-5)}"
00123
# Or instead of the "5" constant, use $zeroos length
$ echo "${temp_num:(-${#zeroos})}"
00123
更新:
$number
当数字变得比 更长(位数更多)时,上面的例子会截断 的最前面的数字$zeroos
:
$ number="1234567" # Changed to 7 digits
echo "${temp_num:(-5)}"
34567 # Resulted in a wrong number!
更安全的方法:
$ number="123"
$ echo "${zeroos:${#number}:${#zeroos}}${number}"
00123
$ number="1234567"
$ echo "${zeroos:${#number}:${#zeroos}}${number}"
1234567
注1:
稍微不同的是,使用$zeroos
resp.的前几个数字$century
(而不是最后几个数字),如下所示:
$ century="2000"
$ year="1"
$ echo "${century:0:-${#year}}${year}"
2001
例如,如果您有混合日期,其中年份为 1 位、2 位甚至 4 位数字,但希望它们在任何情况下都是 4 位数字,而无需条件(用于检查其实际数字)和任何算术,那么这将非常有用。
缺点是,如果${#year}
大于${#century}
,则会导致错误。
笔记2:
使用时printf(正如其他答案所建议的那样),请注意,从大范围来看,它可能会慢得多(查看示例)。
答案2
使用您的脚本,以下操作将会起作用。
#!/bin/bash
x=0
ep=1
while [ $x -le 11 ]
do
ep_padded=$(printf '%02d' $ep)
echo "Welcome $x times"
date --date="$x week" +"%Y:%m:%d"
exiftool -exififd:dateTimeOriginal="$(date --date="$x week" +"%Y:%m:%d") 00" $1$ep_padded*
x=$(( $x + 1 ))
ep=$(( $ep + 1 ))
done
您也可以使用以下形式来增加变量
x=$((++x))
ep=$((++ep))
答案3
如下所示设置您的变量,这将添加一个填充零,您可以根据自己的期望添加更多零。
ep="$(printf '%02d' $((++ep)) )"