gpt4 book ai didi

linux - 将#!/bin/ksh 日期转换函数翻译成#!/bin/sh

转载 作者:太空宇宙 更新时间:2023-11-04 09:54:59 28 4
gpt4 key购买 nike

我使用这个 ksh 函数将“1-Jan-2011”格式转换为“1.1.2011”。

#!/bin/ksh

##---- function to convert 3 char month into numeric value ----------
convertDate()
{
echo $1 | awk -F"-" '{print $1,$2,$3}' | read day mm yyyy ## split the date arg
typeset -u mmm=`echo $mm` ## set month to uppercase
typeset -u months=`cal $yyyy | grep "[A-Z][a-z][a-z]"` ## uppercase list of all months
i=1 ## starting month
for mon in $months; do ## loop thru month list
## if months match, set numeric month (add zero if needed); else increment month counter
[[ "$mon" = "$mmm" ]] && typeset -xZ2 monthNum=$i || (( i += 1 ))
done ## end loop
echo $day.$monthNum.`echo $yyyy | cut -c3-` ## return all numeric date format ddmmyyyy
}

但是我需要通过#!/bin/sh 来使用这个函数。所以我尝试重写它...

#!/bin/sh

##---- function to convert 3 char month into numeric value ----------
convertDate()
{
echo $1 | awk -F"-" '{print $1,$2,$3}' | read day mm yyyy ## split the date arg
echo $mm #IT SEEMS LIKE THE PROBLEM IS IN THE PREVIOUS LINE, BECAUSE THIS VARIABLE IS EMPTY IN #!/bin/sh, BUT IF YOU CHANGE IT TO #!/bin/ksh EVERYTHING SEEM TO BE FINE, THEN FUNCTION WORKS CORRECTLY.
mmm=`echo $mm | tr '[a-z]' '[A-Z]'`
months=`cal $yyyy | grep "[A-Z][a-z][a-z]" | tr '[a-z]' '[A-Z]'`
i=1 ## starting month
for mon in $months; do ## loop thru month list
## if months match, set numeric month (add zero if needed); else increment month counter
if [ "$mon" = "$mmm" ]; then
monthNum=`printf '%02d' $i`
else
i=`expr $i + 1`
fi
done ## end loop
echo $day.$monthNum.`echo $yyyy | cut -c3-` ## return all numeric date format ddmmyyyy
}

convertDate "20-May-2010"

但它不起作用(阅读最后一个脚本中的大写注释):(

帮助!

最佳答案

问题在于,read 命令是否由于管道而在子 shell 中运行,具体取决于 /bin/sh 是哪个 shell;您将从 bash 获得一种行为,而从传统 UNIX(例如 Solaris)/bin/sh 获得另一种行为。请改用 set

set -- `echo $1 | awk -F"-" '{print $1,$2,$3}'`

虽然我可能会写

oIFS="$IFS"
IFS=-
set -- $1
IFS="$oIFS"

关于linux - 将#!/bin/ksh 日期转换函数翻译成#!/bin/sh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6245246/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com