1

bash スクリプトに移植する必要がある tcsh スクリプトがいくつかあります。if、入出力構文などについて調査しましたが、foreach tcsh ループを for ループに移植することに行き詰まっており、助けを求めています。

tcsh コードは次のようになります。

set num_ids = 0
foreach x(`ls item.*.txt`)
   echo $x
   set item_id = `echo $x | cut -f2,2 -d\.`
   echo $item_id
   if ( $num_ids == 0) then
      echo $num_ids
   else
      echo "not in 0"
      echo $num_ids
   endif
   @ num_ids = $num_ids + 1
   echo "printing again $num_ids"
end # end for loop 

そのスニペットをどのように bash コードに移植しますか?

ありがとう!

4

1 に答える 1

2

あなたはこのようにすることができます:

num_ids=0

for x in item.*.txt; do
    echo "$x"
    item_id=${x#item.}; item_id=${item_id%.txt}  ## same as item_id=$(echo "$x" | cut -f2,2 -d\.) but better
    echo "$item_id"
    if [[ num_ids -eq 0 ]]; then
        echo "$num_ids"
    else
        echo "not in 0"
        echo "$num_ids"
    fi
    (( ++num_ids ))  ## same as (( num_ids = num_ids + 1 ))
    echo "printing again $num_ids"
done

注:foreach x([bq]ls item.*.txt[bq])実際には使用する必要がありますが、おそらくfor x in $(ls item.*.txt)使用する必要はありません。ls

ブロックは次のif else fiように単純化することもできます。

    echo "$item_id"
    [[ num_ids -ne 0 ]] && echo "not in 0"
    echo "$num_ids"
于 2013-09-08T18:32:26.553 に答える