Re: [问题] batch to shell script

楼主: goldie (阿良)   2013-07-03 22:50:43
※ 引述《psylove5566 (甜小蜜)》之铭言:
: Hi,
: 请教一下各位大大
: 我有一个batch file如下:
: FOR /F %%i in (list1.txt) DO (parser21 < OriginalData_new/%%i > ParserOut_ver/%%i )
: 我想转换为shell档,我试着转换,以下是经过网络上查后,我转换后的档案,但因为还是无法执行,想请教一下错误何在?
: for i in [list1.txt]; do "parser21 < OriginalData_new/i > ParserOut_ver/i "
我猜你是要把 list1.txt 里的内容,一次取一行出来对吧?
在 bash 里,
用 while + read 两个指令搭配,以达到切一行一行出来,
对于读档来说,我觉得比 for 好用。
例如: (假设 parser21 OriginalData_new/ ParserOut_ver/ 都在当前目录)
作者: psylove5566 (甜小蜜)   2013-07-04 10:17:00
恩,我是要读list中的每一个档案,谢谢您的回复
楼主: goldie (阿良)   2013-07-04 21:59:00
-d设定分隔字符, 本次采unix换行字符: $'\n'格式一定要钱号加一对单引号,不能少$,也不能换成双引号这是 bash 特殊语法,用于展开跳脱字符
作者: psylove5566 (甜小蜜)   2013-07-05 16:15:00
不好意思,我执行后出现以下的错误syntax error near unexpected token `<'请问,done表示while结束,为啥输入list在done之后?请问两个<分开打的意思是什么,谢谢您的回复
楼主: goldie (阿良)   2013-07-05 22:20:00
()是subshell而<()多把subshell的stdout导出伪装成档案再用第一个<设定while-loop的stdin来自上述的(伪)档案< <() 等效于 < input_text_file所以两个< <不能连在一起,因为是不同功能用途XDDD当然你可以把这个while-loop重写成 pipe 型式… 例如:cat list1.txt | while read -r -d $'\n' line; do (…略)虽然改成这样好像比较直观,但我觉得有时反而难用,因为…原本是cat跑在subshell里,新的反而是pipe后面的while-loop跑在subshell里,这样我常在while-loop设定全域变量,会在script其他处取用不到(parent shell)会造成有些你想做的事情你达不到关于<()跟>()语法,有个名词叫 "process substitution"可参考这篇: http://goo.gl/5jBpn以及 Google Shell Style Guide:http://goo.gl/0WN2r 的 Features & Bugs: Pipes to While若两个<少隔空白而连在一起成<<则变成here document种语法
作者: psylove5566 (甜小蜜)   2013-07-07 10:04:00
谢谢您详细的介绍,非常的感激

Links booklink

Contact Us: admin [ a t ] ucptt.com