Как сгенерировать в сценарии строку связанных пар ключ/значение?

sed 's/\([0-9]\),\([0-9]\)/\1\2/g'

Это работает, только если есть по крайней мере два числа между двумя запятыми, поэтому

123,456,789 -> 123456789
12,34,56,78 -> 12345678
but
1,2,3,4,5,6 -> 12,34,56
0
03.10.2021, 19:46
1 ответ

Вы получаете bar, потому что это то, что $1после вашей операции shiftперед циклом.

Чтобы сдвинуть два позиционных параметра, используйте shift 2. Однако может быть безопаснее очистить список позиционных параметров перед циклом, заменив shiftна set --. Таким образом, вы не полагаетесь на то, что пользователь укажет правильное количество параметров. Некоторые оболочки будут выдавать диагностическое сообщение, если вы попытаетесь сместить больше значений, чем в списке, и если пользователь предоставит вам слишком мало или слишком много значений, они все равно будут в "$@".

Кроме того, вам нужно будет использовать set --вместо обычного setпри установке позиционных параметров, как в этом случае, так и вообще, чтобы избежать случайного задания параметров оболочки или, как в этом случае, вызова setс неверными параметрами.

set -- "$@" --build-arg "$line"
4
03.10.2021, 20:10

Теги

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