. Его гораздо проще и читабельнее использовать функцию, чем псевдоним, чтобы поставить аргументы в середине команды.
$ wrap_args() { echo "before $@ after"; }
$ wrap_args 1 2 3
before 1 2 3 after
Если вы читаете, вы узнаете, что вам не нужно знать о обработке аргументов оболочки. Знание опасно. Просто получите желаемый результат, прежде чем темная сторона навсегда контролирует вашу судьбу.
bash
aliases do принимает аргументы, но только на end :
$ alias speak=echo
$ speak hello world
hello world
Ввод аргументов в средний команды через alias
действительно возможен, но он становится уродливым.
Если вам нравится обходить ограничения и делать то, что говорят другие, это рецепт. Просто не обвиняйте меня, если ваши волосы становятся измотаны, а ваше лицо заканчивается тем, что покрыто сухим безумным ученого.
Обходной путь состоит в том, чтобы передать аргументы, которые alias
принимает только в конце (g7) Решение 1
Если вы действительно против использования функции как таковой, вы можете использовать:
$ alias wrap_args='f(){ echo before "$@" after; unset -f f; }; f'
$ wrap_args x y z
before x y z after
Вы можете заменить $@
на $1
, если вам нужен только первый аргумент.
Объяснение 1
Это создает временную функцию f
, которая передаются аргументы (обратите внимание, что f
вызывается в самом конце). unset -f
удаляет определение функции по мере того, как выполняется псевдоним, после чего он не зависает.
Вы также можете использовать подоболочку:
$ alias wrap_args='sh -c '\''echo before "$@" after'\'' _'
Пояснение 2
Псевдоним строит команду:
sh -c 'echo before "$@" after' _
Комментарии:
_
, но это может быть что угодно. Он устанавливается в sh
$0
и требуется, чтобы первый из аргументов, заданных пользователем, не потреблялся. Демонстрация: sh -c 'echo Consumed: "$0" Printing: "$@"' alcohol drunken babble
Consumed: alcohol Printing: drunken babble
$ sh -c "echo Consumed: $0 Printing: $@" alcohol drunken babble
Consumed: -bash Printing:
Здесь значения интерактивной оболочки $0
и $@
заменены на двойные кавычки перед , которые передаются на sh
. Вот доказательство: echo "Consumed: $0 Printing: $@"
Consumed: -bash Printing:
Одиночные кавычки гарантируют, что эти переменные не интерпретируются интерактивной оболочкой и передаются буквально в sh -c
. Вы можете использовать двойные кавычки и \$@
, но лучше всего привести свои аргументы (поскольку они могут содержать пробелы), а \"\$@\"
выглядит еще более уродливым, но может помочь вам выиграть конкурс по запутыванию, где измотанные волосы являются предпосылкой для запись. Вы должны использовать тригонометрию, чтобы определить правильную ширину / высоту, используя прозрачность, чтобы предотвратить черную область, и я думаю, что Трансформация неверна, что делает ее недоступной.
Попробуйте следующее:
public static BufferedImage rotate(BufferedImage image, double angle) {
double sin = Math.abs(Math.sin(angle)), cos = Math.abs(Math.cos(angle));
int w = image.getWidth(), h = image.getHeight();
int neww = (int)Math.floor(w*cos+h*sin), newh = (int) Math.floor(h * cos + w * sin);
GraphicsConfiguration gc = getDefaultConfiguration();
BufferedImage result = gc.createCompatibleImage(neww, newh, Transparency.TRANSLUCENT);
Graphics2D g = result.createGraphics();
g.translate((neww - w) / 2, (newh - h) / 2);
g.rotate(angle, w / 2, h / 2);
g.drawRenderedImage(image, null);
g.dispose();
return result;
}
private static GraphicsConfiguration getDefaultConfiguration() {
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice();
return gd.getDefaultConfiguration();
}
из http://flyingdogz.wordpress.com/2008/02/11/image-rotate-in-java-2-easier-to-use/
Помогает ли это вам:
BufferedImage DaImage = new BufferedImage(height, width, type);
to:
BufferedImage DaImage = new BufferedImage(**width, height**, type);
?
Вы можете попробовать использовать значок Rotated .