Почему мой процессор так много времени проводит в системе? [закрыто]

Вы не можете напрямую задавать значения позиционным параметрам, подобным этому.

Вы можете установить их с помощью команды set , но это установит все значения ( $ 1 , $ 2 , ...)

например

$ set -- first second third fourth fifth
$ echo $1
first
$ echo $2
second

Теперь есть два случая, когда $ 2 может быть пустой строкой; первый, если значение не было передано, или второй, если "" передается как фактический аргумент, и поэтому все еще может быть $ 3 , $ 4 и т. д.

Мы можем обработать каждый случай немного сложным способом:

#!/bin/bash

echo Before 1=$1 2=$2 3=$3 4=$4

if [ -z "$2" ]
then
  first=$1
  shift 2
  set -- "$first" value "$@"
fi

echo After 1=$1 2=$2 3=$3 4=$4

Бит внутри теста if обеспечит сохранение всех остальных значений.

например.

% ./testing arg1 "" "arg 3" "and arg 4"
Before 1=arg1 2= 3=arg 3 4=and arg 4
After 1=arg1 2=value 3=arg 3 4=and arg 4

Но вы могли бы сделать что-то проще и просто использовать $ {2: -value} , которое будет оценивать как значение , если $ 2 не установлено , поэтому вам не нужно беспокоиться о переписывании аргументов.

1
25.02.2014, 18:04
0 ответов

Теги

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