$ str="token1;token2;token3;token4"
$ echo $str
token1;token2;token3;token4
$ echo $str | tr ';' ' '
token1 token2 token3 token4
$ arr=( $(echo $str | tr ';' ' ') ) # Populate the tokens into an array
$ echo ${arr[0]} # Access items by index
token1
$ echo ${arr[2]}
token3
$ echo ${arr[1]}
token2
$ echo ${#arr[@]} # Length of the array
4
Считайте то, что страница руководства говорит об опции -I
, который Вы используете:
Случаи замены ул. замены в начальных аргументах с именами, считанными из стандартного входа. Кроме того, закрыл кавычки, пробелы не завершают входные параметры; вместо этого разделитель является символом новой строки.
Нет, это не о “блоках” по сравнению с “объектами”, это просто смещает терминологию. xargs
берет вход, заключенный в кавычки с '
или "
и разграниченный пробелами, кроме тех случаев, когда передаются определенные опции.
Некоторые опции изменяются на линию за линией обработку без заключения в кавычки: -I
, -L
, -i
(GNU), -l
(GNU). Опция -0
(где доступный), изменяется на разграниченный пустым указателем вход без заключения в кавычки. Опция -d
(GNU) изменяется на пользовательский разделитель без заключения в кавычки.
Одна из причин того, чтобы сделать Параллель GNU состояла в том, чтобы сделать это более предсказуемым, чем xargs. https://www.gnu.org/software/parallel/history.html
Если Вы поражены по тому, как xargs интерпретирует аргументы, рассмотрите использование Параллели GNU вместо этого.
Можно установить Параллель GNU просто:
wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem
Посмотрите вводные видео для Параллели GNU для узнавания больше: https://www.youtube.com/playlist? list=PL284C9FF2488BC6D1