Помогите понять, как использовать большую скобку в этом контексте

Вы пытаетесь определить переменную массива, но используете формат строки:

## This will define a string variable
$ MEDIUM_PERMISSIONS_BIN=/bin/{ls,rm,bash,nano,mkdir,kill,ln,ps,grep,sed}
$ echo $MEDIUM_PERMISSIONS_BIN
/bin/{ls,rm,bash,nano,mkdir,kill,ln,ps,grep,sed}

## The parentheses tell the shell this is an array
$ MEDIUM_PERMISSIONS_BIN=(/bin/{ls,rm,bash,nano,mkdir,kill,ln,ps,grep,sed})
$ echo $MEDIUM_PERMISSIONS_BIN  ## the 1st element of the array
/bin/ls
$ echo ${MEDIUM_PERMISSIONS_BIN[@]} ## the entire array
/bin/ls /bin/rm /bin/bash /bin/nano /bin/mkdir /bin/kill /bin/ln /bin/ps /bin/grep /bin/sed

Так что просто измените файл конфигурации на:

MEDIUM_PERMISSIONS_BIN=(/bin/{ls,rm,bash,nano,mkdir,kill,ln,ps,grep,sed})
MEDIUM_PERMISSIONS_USR_BIN=(/usr/bin/{vim,touch,java,python,gcc,awk,make})
MEDIUM_ENVIROMENT_LIFESPAN=midnight
MEDIUM_PERSISTENT_HOME=true

Затем в своем скрипте используйте "${MEDIUM_PERMISSIONS_BIN[@]}".

0
05.12.2020, 07:27
1 ответ

Это не имеет ничего общего с подстановкой, это стандартное условие оболочки if. [— это встроенная оболочка (, а также внешняя команда ), используемая для тестов. То, что вы написали, эквивалентно этому:

if [ ! -d ~/.ssh ]; 
then 
    mkdir ~/.ssh
fi

Как объяснено вhelp [(в bash):

$ help [
[: [ arg... ]
    Evaluate conditional expression.
    
    This is a synonym for the "test" builtin, but the last argument must
    be a literal `]', to match the opening `['.

Здесь мы используем тест -d, чтобы проверить, является ли ~/.sshкаталогом. Вы можете снова увидеть различные варианты теста с помощьюhelp test(в bash ). Здесь мы используем эти два:

$ help test | grep -E -- '^ *!|-d'
      -d FILE        True if file is a directory.
      ! EXPR         True if expr is false.

Это означает, что [ ! -d ~/.ssh ]будет истинным, если ~/.sshне является каталогом.

Теперь, когда мы знаем, что [— это команда, которую может запускать оболочка, ее можно рассматривать как другие команды. Синтаксис command && otherCommandтакже является стандартным и означает «запускать otherCommand, только если commandбыл успешным». Итак, здесь вы говорите: «Создайте каталог ~/.ssh, если он еще не существует :

.
[ ! -d ~/.ssh ] && mkdir ~/.ssh;
--------------- -- ------------
       |        |        |=======> "otherCommand"
       |        |================> logical AND
       |=========================> "if ~/.ssh is not a directory" (command)
4
18.03.2021, 22:45

Теги

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