Как передать все аргументы функции вместе с другой командой?

В большинстве систем Bash использует 64 -битные целые числа со знаком. Вам понадобится другой инструмент, такой как bc, чтобы выйти за рамки этого.

Это означает, что с bash максимальное число, которое вы можете иметь, равно 2^63-1, равно 9,223,372,036,854,775,807, и вы превышаете это число:

awk 'BEGIN{print 2432902008176640000 * 21}'
51090942171709440000     #--> 51,090,942,171,709,440,000
3
24.11.2020, 13:09
2 ответа

В вашей функции оболочки programиспользуйте "$@"для обращения к списку всех аргументов командной строки, переданных функции. С кавычками каждый аргумент командной строки, заданный для program, будет дополнительно заключаться в кавычки (, обычно вам нужно ).

program () {
    "$GOBIN"/program "$@"
}

Затем вы должны позвонить programвот так:

program -p hello_world -tSu

или, если вы хотите пройти hello worldвместо hello_world,

program -p 'hello world' -tSu

Использование $1относится только к первому аргументу командной строки (, а $2относится ко второму и т. д. ), как вы заметили. Значение $1будет дополнительно разделено на пробелы -, и каждая сгенерированная строка будет подвергнута подстановке имени файла, поскольку расширение не заключено в кавычки. Это сделало бы невозможным правильную передачу аргумента, который содержит пробелы или шаблоны подстановки имен файлов, в функцию.

15
18.03.2021, 22:47

"$@"— это способ передать все аргументы, полученные функцией/скриптом, как ответил Кусалананда.

Однако, учитывая, что вы, кажется, используете папку со своими программами go, я думаю, вам будет лучше просто добавить свою папку $GOBINв свой PATH:

export GOPATH="$HOME/go_projects"
export GOBIN="$GOPATH/bin"
export PATH="$PATH:$GOBIN"

Таким образом, вы можете запустить любую программу, хранящуюся в $GOBIN, просто набрав ее имя (, если она не имеет того же имени, что и существующая программа, мы добавляем $GOBIN к $PATH, поэтому эти программы будут выбраны последними).

PS :Для полноты картины есть третий вариант, который заключается в использовании псевдонима вместо функции, которую вы можете поместить в.bashrc:

alias program="$GOBIN/program"
6
18.03.2021, 22:47

Теги

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