我正在阅读test.txt文件。格式:
#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
a="$line" | cut -c1-2
b="$line" | cut -c3-4
c="$line" | cut -c5-6
d="$line" | cut -c7-8
e="$line" | cut -c9-10
f="$line" | cut -c11-12
g="$line" | cut -c13-14
h="$line" | cut -c15-16
i="$line" | cut -c17-18
j="$line" | cut -c19-20
k="$line" | cut -c21-22
l="$line" | cut -c23-24
m="$line" | cut -c25-26
n="$line" | cut -c27-28
o="$line" | cut -c29-30
p="$line" | cut -c31-32
#./a.out "$a" "$b" "$c" "$d" "$e" "$f" "$g" "$h" "$i" "$j" "$k" "$l" "$m" "$n" "$o" "$p"
echo "$line"
echo "$a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p"
done < test_10.txt
我正在逐行读取此文件并将其拆分为(例如,第1行:79 03 3d 01 35 a2 1e 45 c6 0e 28 37 85 f5 91 4b)
bash脚本是:
def test_list():
tests = ['t1','t2','t4','t5','t7']
return tests
app.conf.update(
CELERYBEAT_SCHEDULE={
'schedule_task':{
'task':'test_celery.tasks.test_scheduler',
'schedule': timedelta(seconds=10),
# 'args': (test_list(),)
}
}
)
@app.task
def test_scheduler():
tests = test_list()
for test in tests:
print "RUNNING TEST {}".format(test)
目前我只是想打印变量。我打算稍后将它们作为命令行arg传递给我的C ++程序。
问题是,我无法打印变量。当然我的C ++程序也不能接受参数。
我做错了什么?
答案 0 :(得分:1)
您需要命令替换,$()
,(以及echo
):
a=$(echo "$line" | cut -c1-2)
此处命令echo "$line" | cut -c1-2
的STDOUT将保存为变量a
。
您可以使用此处字符串<<<
来传递变量内容,而不是创建匿名管道:
a=$(cut -c1-2 <<<"$line")
现在选择任何方法,并将其应用于所有其他方法。
答案 1 :(得分:1)
要使管道按预期工作,$line
的内容需要转到stdin
,例如通过echo
。
此外,您需要使用带有反引号的command substitution或$()
(后者是首选方法)将变量设置为命令的结果,否则它将尝试评估输出echo "$line" | cut -c1-2
作为命令本身,可能会给您command not found
错误。
例如,您的第一个作业应该是
a=$(echo "$line" | cut -c1-2)
其他人会遵循类似的模式。