Объединение аргументов bash в одну строку с пробелами

Я пытаюсь объединить все аргументы с функцией Bash в одну строку с пробелами, разделяющими каждый аргумент. Мне также нужно, чтобы строка включала одинарные кавычки вокруг всей строки.

Вот что я до сих пор …

$array=("$@") str="\'" for arg in "${array[@]}"; do let $str=$str+$arg+" " done let $str=$str+"\'" 

Очевидно, это не работает, но мне интересно, есть ли способ достичь этого?

Я считаю, что это делает то, что вы хотите. Он поместит все аргументы в одну строку, разделенную пробелами, с одинарными кавычками вокруг всех:

 str="'$*'" 

$* выдает все аргументы скриптов, разделенные первым символом $IFS который по умолчанию является пространством.

Внутри строки с двойными кавычками нет необходимости избегать одиночных кавычек.

пример

Остановимся выше в файле сценария:

 $ cat script.sh #!/bin/sh str="'$*'" echo "$str" 

Теперь запустите скрипт с примерными аргументами:

 $ sh script.sh one two three four 5 'one two three four 5' 

Этот скрипт – POSIX. Он будет работать с bash но не требует bash .

Вариант: конкатенация косой чертой вместо пробелов

Мы можем изменить от пробелов к другому персонажу, настроив IFS :

 $ cat script.sh #!/bin/sh old="$IFS" IFS='/' str="'$*'" echo "$str" IFS=$old 

Например:

 $ sh script.sh one two three four 'one/two/three/four' 

Это проще, чем вы думаете:

 #!/bin/bash array="${@}" echo $array 

chmod + x, и запустите его:

 $ ./example.sh --foo bar -b az --foo bar -b az