零填充Bash/Shell

零填充Bash/Shell,bash,shell,Bash,Shell,我需要将最后3个字符的值设为002,并将其减1 001。我现在有一个问题,它正在把它转换成一个整数。所以001变成了1。我试图做的是使用printf并将其转换回001。然而,这似乎不适合我。我有以下资料: set -x substring() { VAR=$1 OFFSET=$2 LENGTH=$3 RET_VAL=${VAR:$OFFSET:$LENGTH} } # $1 filename # Change to PF Gazetteer director

我需要将最后3个字符的值设为002,并将其减1 001。我现在有一个问题,它正在把它转换成一个整数。所以001变成了1。我试图做的是使用printf并将其转换回001。然而,这似乎不适合我。我有以下资料:

set -x

substring()
{
    VAR=$1
    OFFSET=$2
    LENGTH=$3
    RET_VAL=${VAR:$OFFSET:$LENGTH}
}

# $1 filename

# Change to PF Gazetteer directory
cd $CARRIER_PF_UPDATES_DIR

LOG=log.txt
DownloadedFile=$1
OldFile=
DATE=$(date +"%Y-%m-%d-%H:%M:%S")
RET=0

if [ "${2+1}" == "1" ]
then
    echo "Date: " $DATE > $LOG
    echo "filename: " $DownloadedFile >> $LOG
fi

substring ${DownloadedFile} -3 3
extension=$RET_VAL
old_ext=$((${extension}+1))

substring ${DownloadedFile} 0 9
echo $RET_VAL
oldFile="${RET_VAL}${old_ext}"
oldFile= `printf "%020d" ${RET_VAL}`
oldFile="${oldFile}.${old_ext}"

#printf '%03d\n' 1

echo $oldFile

# move any temporary files if they exist
mv "${DownloadedFile}~" ${DownloadedFile}

# check to see if we got a file
result=$(grep 226 run.ilog)


if [ "${2+1}" == "1" ]
then
    echo "grep found: " $result >> $LOG
fi

if [ -e "${DownloadedFile}" ]
then
   #add back onto filename
   #store back onto var = $OldFile
   #Check if OldFile exist
   #Cat files together and - Cat oldFile DownloadedFile > tempFile
echo ""
fi

if [ "$result" == "" ]
then
     # File not found
     RET=100
else
     RET=10
     # START F4202
     sorted=$(sort -t'+' -k7 ${fileName} > ${fileName}.sorted)
     if [ -e "${fileName}.sorted" ]
     then
        mv "${fileName}" "unsorted/${fileName}.unsorted"
        mv "${fileName}.sorted" ${fileName}
     fi
     # END F4202
fi

if [ "${2+1}" == "1" ]
then
    echo "script ret: " $RET >> $LOG
fi
要查看输出,请单击以下链接,我似乎得到的是1.1而不是1.1,而我应该得到001,这将不起作用:

oldFile= `printf "%020d" ${RET_VAL}`

删除
=

格式有什么问题?我还是bash的初学者,请原谅me@Djj您要求用0填充20个空格。您应该使用
printf“%03d”${RET_VAL}
,因为这将使用
3
字符,如有必要,可以使用零填充。@SpencerRathbun哦,对了-\我不知道20代表什么。感谢you@Djj如果您不熟悉bash脚本,我建议您阅读。