此命令将按预期生成十个文件:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.recycleview import RecycleView
from kivy.uix.recycleview.views import RecycleDataViewBehavior
from kivy.uix.label import Label
from kivy.properties import BooleanProperty
from kivy.uix.recycleboxlayout import RecycleBoxLayout
from kivy.uix.behaviors import FocusBehavior
from kivy.uix.recycleview.layout import LayoutSelectionBehavior
from kivy.core.window import Window
Builder.load_string('''
<RV>:
viewclass: 'SelectableLabel'
RecycleBoxLayout:
default_size: None, dp(56)
default_size_hint: 1, None
size_hint_y: None
height: self.minimum_height
orientation: 'vertical'
multiselect: False
<SelectableLabel>:
# Draw a background to indicate selection
canvas.before:
Color:
rgba: (.0, 0.9, .1, .3) if self.selected else (0, 0, 0, 1)
Rectangle:
pos: self.pos
size: self.size
''')
class SelectableLabel(RecycleDataViewBehavior, Label):
''' Add selection support to the Label '''
index = None
selected = BooleanProperty(False)
selectable = BooleanProperty(True)
def refresh_view_attrs(self, rv, index, data):
''' Catch and handle the view changes '''
self.index = index
return super(SelectableLabel, self).refresh_view_attrs(
rv, index, data)
def apply_selection(self, rv, index, is_selected):
''' Respond to the selection of items in the view. '''
self.selected = is_selected
if is_selected:
print("selection changed to {0}".format(rv.data[index]))
else:
print("selection removed for {0}".format(rv.data[index]))
class RV(RecycleView):
def __init__(self, **kwargs):
super(RV, self).__init__(**kwargs)
self._keyboard = Window.request_keyboard(self._keyboard_closed, self)
self._keyboard.bind(on_key_down=self._on_keyboard_down)
self.data = [{'text': str(x)} for x in range(10)]
self.selectedItem = -1
def _keyboard_closed(self):
pass
def _on_keyboard_down(self, keyboard, keycode, text, modifiers):
print()
if keycode[1] == 'down':
self.clearAll()
self.nextItem()
print('down')
elif keycode[1] == 'up':
self.clearAll()
self.prevItem()
print("up")
def clearAll(self):
if (self.selectedItem > -1):
for i in range(len(self.view_adapter.views) - 1):
self.view_adapter.views[self.selectedItem].selected = 0
def nextItem(self):
if self.selectedItem < len(self.data) - 1:
self.selectedItem += 1
else:
self.selectedItem = 0
self.view_adapter.views[self.selectedItem].selected = 1
print(self.selectedItem)
def prevItem(self):
if self.selectedItem > 0:
self.selectedItem -= 1
else:
self.selectedItem = len(self.data) - 1
self.view_adapter.views[self.selectedItem].selected = 1
print(self.selectedItem)
class TestApp(App):
def build(self):
return RV()
if __name__ == '__main__':
TestApp().run()
但是,这个只会生成一个名为“model _”的文件:
for i in `seq 10`; do touch model; mv model model_$i; done
似乎文件名中的下划线有一些影响,但实际发生了什么?谢谢你的回答。
答案 0 :(得分:3)
在您的第二个示例中,$i_best
被解释为变量名称,并且可能会扩展为空字符串。
使用花括号和/或引号展开$i
:
for i in `seq 10`; do
touch model_best
# just quote the variable (my favourite)
mv model_best model_"$i"_best
# or (belt and braces approach, quotes can also go around the whole arg)
# mv model_best model_"${i}"_best
# or just curly braces
# fine here since $i contains no spaces or glob characters
# (but I don't like it)
# mv model_best model_${i}_best
done