В bash, как я могу ждать x секунд в read [duplicate]

tl; dr: «PECS» находится с точки зрения коллекции. Если вы только вытаскиваете предметы из общей коллекции, это производитель, и вы должны использовать extends; если вы загружаете только элементы, это потребитель, и вы должны использовать super. Если вы делаете оба с одной и той же коллекцией, вы не должны использовать либо extends, либо super.


Предположим, что у вас есть метод, который принимает в качестве параметра набор вещей, но вы хотите, чтобы он был более гибким, чем просто принятие Collection<Thing>.

Случай 1: вы хотите пройти коллекцию и делать вещи с каждым элементом. Затем список будет производителем, поэтому вы должны использовать Collection<? extends Thing>.

. Поводом является то, что Collection<? extends Thing> может содержать любой подтип Thing, и поэтому каждый элемент будет вести себя как Thing ] при выполнении операции. (Фактически вы не можете добавить что-либо к Collection<? extends Thing>, потому что во время выполнения вы не можете знать, какой подтип [] Thing содержится в коллекции.)

Случай 2: вы хотите добавьте вещи в коллекцию. Затем список - это потребитель, поэтому вы должны использовать Collection<? super Thing>.

. Здесь рассуждение состоит в том, что в отличие от Collection<? extends Thing>, Collection<? super Thing> всегда может удерживать Thing независимо от того, какой фактический параметризованный тип является. Здесь вам все равно, что уже есть в списке, если он позволит добавить Thing; это то, что гарантирует ? super Thing.

50
задан perror 6 May 2013 в 10:57
поделиться

1 ответ

Чтобы заставить ваше выражение работать, изменение && для -a выполнит трюк.

Правильно выглядит так:

 if [ -f $VAR1 ] && [ -f $VAR2 ] && [ -f $VAR3 ]
 then  ....

или как

 if [[ -f $VAR1 && -f $VAR2 && -f $VAR3 ]]
 then  ....

или даже

 if [ -f $VAR1 -a -f $VAR2 -a -f $VAR3 ]
 then  ....

Вы можете найти более подробную информацию в этом вопросе bash: Несколько унарных операторов в выражении if и некоторые ссылки, приведенные там как В чем разница между тестом, [и [[? .

113
ответ дан Community 19 August 2018 в 04:00
поделиться
  • 1
    Огромное спасибо! Я отвечу на это очень скоро! ;) – Ziyaddin Sadigov 6 May 2013 в 10:57
  • 2
    Обратите внимание, что POSIX рекомендует использовать && и || с записью с одним скобком над -a и -o, поэтому, если вы пишете переносной код, переходите к первым нотациям, иначе второй и пропустить третий, тем более, что он может стать неудобным и трудночитаемым, если вам нужно группировать выражения. – Adrian Frühwirth 6 May 2013 в 13:22
Другие вопросы по тегам:

Похожие вопросы: