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 回答