将tcsh代码移植到bash代码

时间:2013-09-08 18:28:45

标签: bash tcsh

我有一些tcsh脚本需要移植到bash脚本。我对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代码中?

谢谢!

1 个答案:

答案 0 :(得分: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"