我对bash脚本非常陌生。 我有一个.txt文件,其字符串名称由行分隔(每个字符串之间都有空格)。
my.txt是:
my name
my class
my room
当我使用终端运行python脚本时。我需要一个个传递参数。
python3 python_file.py -f 'my name'
python3 python_file.py -f 'my class'
python3 python_file.py -f 'my room'
工作正常。我想对每个字符串(我的名字,我的班级和我的房间)分别使用bash脚本,并将其作为python脚本的参数传递。
#!/bin/bash
while read LINE; do
#echo ${LINE}
python3 pythonfile.py -f $LINE
done < my.txt
它不起作用,因为每个字符串之间都有一个空格(我的名字),python假定为字符串并显示错误消息
error: unrecognized arguments: name
当我试图在bash脚本中加上引号时,它不起作用。
#!/bin/bash
while read LINE; do
echo \'${LINE}\'
#python3 pythonfile.py -f $LINE
done < my.txt
output:
'my name
'my class
'my room
具有相同的错误消息。
当我尝试在.txt文件中加上引号时,它甚至不起作用。
新:my.txt
'my name'
'my class'
'my room'
相同的错误消息:
error: unrecognized arguments: name
我不想通过从my.txt文件中逐个读取名称来使用一个python脚本来执行此操作。我在python脚本中有一些内部编码不适合此操作。因此,我想使用bash。
请指导。
答案 0 :(得分:1)
运行此shell脚本时,我的Mac似乎提供了预期的输出:
#!/bin/bash
while read LINE; do
echo python3 pythonfile.py -f \'${LINE}\'
#python3 pythonfile.py -f $LINE
done < my.txt
注意到您在输出中没有看到最后的引号,也没有从输入中去除任何内容,我怀疑您的数据文件是在Windows环境中生成的,并且每行包含<CR><LF>
个终止符
所以您的脚本在每行输入中输出的内容(shell剥去了终止换行符)是
'some name<CR>'<LF>
回车的结果是在第一个报价上加上第二个报价,使它“消失”。通常有一个dos2unix
或类似的实用程序可以帮助您转换此类数据文件。
答案 1 :(得分:0)
答案由Inian给出。无法接受该评论作为答案,因此请在此处发布。
应该是python3 pythonfile.py -f "$LINE"