4

Если я получаю строку CMD, как:

myscript param1 param2 param3 param4 param5 param6 ... (so on)

Как сохранить строку, состоящую из параметров, начиная с какого-то определенного? $ @ Дает мне всю объединенную командную строку. Мне нужно, чтобы строка начиналась как "param4 param5 param6 ... (и так далее)".

2 ответа2

4

Вы должны убрать неинтересные аргументы:

shift 3
4

Вы можете использовать вариант нарезки массива, чтобы сделать это:

args1to3="${*:1:3}"  # Three arguments starting from $1
args4on="${*:4}"     # The arguments starting from $4

Кстати, это может быть не то, что вы хотите, потому что он просто склеивает аргументы вместе с пробелами между ними; если какой-либо из аргументов также содержит пробелы, он потеряет счет того, какие пробелы были внутри аргументов, а какие были между ними (см. BashFAQ # 50). Если вы хотите иметь возможность хранить их прямо, используйте вместо этого массив:

args1to3=("${@:1:3}")   # Three arguments starting from $1, as an array
args4on=("${@:4}")      # The arguments starting from $4, as an array

othercmd "${args1to3[@]}"             # Pass the first 3 arguments intact
for somearg in "${args4on[@]}"; do    # Process args 4 on, one at a time
  othercmd2 "$somearg"
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .