我有一些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代码中?
谢谢!
答案 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"