Изменение пустой строковой переменной внутри оператора switch в функции bash

Вы можете сделать это, назначив каждый сценарий конкретному ядру с помощью набора задач сначала вам нужно получить идентификатор процесса для вашего сценария с ps aux | grep или используя pgrep -f , затем передайте его в набор задач следующим образом набор задач -pc 0 $ pid , это назначит процесс ядру 1. для получения дополнительной информации о наборе задач http://linuxcommand.org/man_pages/taskset1.html

2
04.09.2016, 18:51
2 ответа

Похоже, вы пытаетесь выполнить передачу по ссылке функцию типа.

Они не очень подходят для сценариев bash . Мы можем подделать его с помощью команды eval , но это имеет много рискованного поведения (потенциальная оценка команд, встроенных в строки), и поэтому не рекомендуется.

В этом примере код будет выглядеть примерно так:

function check_cases {
    case $2 in
        r) eval $1=\"\$$1 Read\" ;;
        w) eval $1=\"\$$1 Write\" ;;
        x) eval $1=\"\$$1 Execution\" ;;
    esac
}

check_cases var r
check_cases var w
check_cases var x

echo $var

Вместо этого обычно лучше использовать семантику передачи по значению ; просто верните желаемое значение и попросите вызывающего добавить его в переменную.

например.

function check_cases {
    case $1 in
        r) echo " Read" ;;
        w) echo " Write" ;;
        x) echo " Execution" ;;
    esac
}

var="$var$(check_cases r)"
var="$var$(check_cases w)"
var="$var$(check_cases x)"

echo $var
2
27.01.2020, 22:10

Непонятно, чего вы хотите достичь, но в любом случае ...

Прежде всего, синтаксис для присвоения значений не

$val=value

, а

val=value

В любом случае

1=value

не сработает, потому что имя переменной не может начинаться с числа.

Чтобы присвоить значения позиционным параметрам, сделайте следующее:

function check_cases {
    case $2 in
        r) append=' Read';;
        w) append=' Write';;
        x) append=' Execution';;
    esac
    set "$1""$append" "$2" # notice no space between "$1" and "$append"
    echo "$@" # print all parameters
    echo Number of parameters: $#
}
0
27.01.2020, 22:10

Теги

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