Ответ 1
Вы можете сохранить его в массиве:
args=("[email protected]")
тогда вы можете получить доступ к каждому из аргументов с индексом: "${args[index]}"
и все аргументы сразу с помощью "${args[@]}"
.
Как сохранить [email protected]
в переменной при сохранении ее свойств?
Я хочу получить точно такое же поведение, даже если я использую [email protected]
или свою собственную переменную во всех возможных ситуациях.
Не удалось выполнить следующие попытки:
[email protected]
args2="[email protected]" # the arguments are combined (see the last output paragraph)
Я тестировал их, используя следующую строку:
s.sh A B=" " C
s.sh
#!/bin/bash
[email protected]
args2="[email protected]"
#args3 = ? - TODO
echo $args
echo $args2
echo [email protected]
#echo $args3
echo
echo "$args"
echo "$args2"
echo "[email protected]"
#echo "$args3"
echo
java A $args
java A $args2
java A [email protected]
#java A $args3
echo
java A "$args"
java A "$args2"
java A "[email protected]"
#java A "$args3"
A.java
import java.util.Arrays;
public class A {
public static void main(String args[]){
System.out.println(args.length + ": " + Arrays.asList(args));
}
}
Фактический вывод:
A B= C
A B= C
A B= C
A B= C
A B= C
A B= C
3: [A, B=, C]
3: [A, B=, C]
3: [A, B=, C]
1: [A B= C]
1: [A B= C]
3: [A, B= , C]
Ожидаемый результат (если TODO заменяется решением) и echo
включены
A B= C
A B= C
A B= C
A B= C
A B= C
A B= C
A B= C
A B= C
3: [A, B=, C]
3: [A, B=, C]
3: [A, B=, C]
3: [A, B=, C]
1: [A B= C]
1: [A B= C]
3: [A, B= , C]
3: [A, B= , C]
Вы можете сохранить его в массиве:
args=("[email protected]")
тогда вы можете получить доступ к каждому из аргументов с индексом: "${args[index]}"
и все аргументы сразу с помощью "${args[@]}"
.
Это зависит от того, что вы хотите сделать. Использование [email protected]
поддерживает разделение аргументов командной строки, если вы хотите объединить их в одну строку, вместо этого используйте $*
. Например:
args="$*"
java A $args
Когда используется "$*"
, аргументы командной строки объединяются в одну строку, используя первый символ IFS
как "клей" между каждым аргументом. По умолчанию это пробел. Единственная проблема заключается в том, что любой из аргументов содержит пробелы. Если вы знаете, что будут использоваться пробелы, а не вкладки, то вы можете использовать IFS
:
oldIFS="$IFS"
IFS=$'\t'
args="$*"
java A.py $args
IFS="$oldIFS"
Изменить: поскольку вы хотите сохранить их отдельно, используйте массив:
args=("[email protected]")
java A "${args[@]}"
Использование "индекса" @
оказывает аналогичный эффект на "[email protected]"
(вы можете также использовать *
для объединения элементов вместе, как и "$*"
).