Bash参数替换

时间:2016-04-29 12:23:54

标签: bash parameters substitution

我正在尝试学习bash参数替换并且有一个非常基本的问题:

为什么这样做:

    create table time
(
  time_emp number(3) NOT NULL CONSTRAINT time_emp_FK references employee(emp_id)
);

但这不起作用:

class TimeAxisItem(pg.AxisItem):
  def __init__(self, *args, **kwargs):
    super(TimeAxisItem, self).__init__(*args, **kwargs)

  def tickStrings(self, values, scale, spacing):
    return [QTime().addMSecs(value).toString('mm:ss') for value in values]

class MyApplication(QtGui.QApplication):
  def __init__(self, *args, **kwargs):
    super(MyApplication, self).__init__(*args, **kwargs)
    self.t = QTime()
    self.t.start()

    self.data = deque(maxlen=20)

    self.win = pg.GraphicsWindow(title="Basic plotting examples")
    self.win.resize(1000,600)

    self.plot = self.win.addPlot(title='Timed data', axisItems={'bottom':  TimeAxisItem(orientation='bottom')})
    self.curve = self.plot.plot()

    self.tmr = QTimer()
    self.tmr.timeout.connect(self.update)
    self.tmr.start(100)

    print "Opening port"
    self.raw=serial.Serial("com4",9600)
    print "Port is open"


  def update(self):
    line = self.raw.read()
    ardString = map(ord, line)
    for number in ardString:
        numb = float(number/77.57)
        print numb
        self.data.append({'x': self.t.elapsed(), 'y': numb})
        x = [item['x'] for item in self.data]
        y = [item['y'] for item in self.data]
        self.curve.setData(x=x, y=y)

def main():
  app = MyApplication(sys.argv)
  sys.exit(app.exec_())

if __name__ == '__main__':
  main()

我正在使用Mac OS X bash。

2 个答案:

答案 0 :(得分:1)

你的第二个例子中的问题是双引号保护封闭的空格不受Bash中的单词分裂的影响:

而不是两个参数-Es/./x/g,只有一个参数-E s/./x/g(包含空格)将传递给相应的exec()系统调用,最后传递给{在这种情况下{1}}。

答案 1 :(得分:0)

因为在第二个例子中,(错误的一个)你使用错误的引号。引号用于指定从该变量得到的内容必须被视为字符串,并在其中一个中添加了两个变量。每个人都必须分开,因为像这样说它的一个变量,所以sed看到一个变量而不是两个。例如,让我们说:

v1=123
v2=456

正如你在第二个例子中看到的那样,sed会看到这个:“123456”,虽然你想要看到的是两个变量,一个有123个,第二个有456.这就是为什么你应该有它们在分开的报价! 我希望我解释它足够让你理解!!

<强> P.S

你在第二个例子中实际做了什么,如果你想要调整两个变量,你可以在某些时候使用它,并将它们作为字符串添加到另一个变量中:)

<强>更新

所以我们举个例子......

v1=123
v2=456
CASE1="$v1" "$v2"
CASE2="$v1 $v2"
echo CASE1
echo CASE2

对于CASE1,输出为123456,对于CASE2,输出为123 456 .....你现在得到的结果是什么? 在这两种方式中做到这一点的唯一方法是打印出同样的东西.......

v1=123
v2=456
CASE1="$v1" "$v2"
CASE2="$v1$v2"

使case2在变量之间没有空格......