2016-05-23 20 views
0

私はこの機能を何度も書いていますが、それを正しく理解することはできません。小さな構文エラーのように見えますが、修正できません。宣言で

function hadleDate{ 
    date=`echo $1|cut -d"." -f1-3` 
    for element in $date; do 
     size=${#element} 
     if [[ $element == 0? ]]; then 
      echo -n $element|cut -c2- 
     elif [[ $size -eq 4 ]]; then 
      echo $element 
     else 
      echo -n $element 
     fi 
    done 
} 
mos="14.03.2013" 
echo handleDate $mos 
+0

はあなたが物事のカップルを試みた後、あなたの努力を投稿することができますか? 1.スクリプトの先頭に 'set -x'行を追加し、問題の原因となったものを確認します。2.コードをhttps://www.shellcheck.net/にコピーしてコピーし、エラーを修正します警告が表示されます。 – Inian

+0

また、タイプミスを修正しました:Not hadle ...しかしハンドル... –

答えて

4

関数名が直接{を続けることができません。空白または括弧が必要です。

function hadleDate() { 
#     ~~ 
+1

'function'キーワードではオプションですが、' {'の前のスペースはありません。 – chepner

+0

@chepner:ありがとう、言い直されました。 – choroba

0

構文エラーについては、shellcheck.netをご覧ください。

あなたが

function hadleDate { 
    date=`echo $1|cut -d"." -f1-3` 
    for element in $date; do 
     size=${#element} 
     if [[ $element == 0? ]]; then 
      echo -n $element|cut -c2- 
     elif [[ $size -eq 4 ]]; then 
      echo $element 

     fi 
    done 
    } 
    mos="14.03.2013" 
    echo handleDate $mos 
+1

ほとんどの場合、彼は 'hadleDate'と' {'の間のスペースを忘れてしまった。 – chepner

+0

はい、確かに。結論はここに投稿する前にシェルチェックを行うべきです:) –

+0

ごめんなさい、私はまだここで働く方法を学ぶここにnewbeです:) –

0

あなたhandleDate機能は、フィールドに日付をカットし、配列に入れしようとする「ために」、とのために行われた場合でWiFiを逃しました。可変日付は配列ではなく単なる文字列です。あなたはこのような配列せずに行うことができます

function handleDate { 
    # Cut fields with dots and use $1 as input for the read. 
    IFS=. read mm dd yyyy <<< "${1}" 
    # Using printf can cut of the zeroes by converting the string to a number 
    printf "%d-%d-%s\n" "${mm}" "${dd}" "${yyyy}" 
} 

mos="14.03.2013" 
handleDate "${mos}" 
関連する問題