2016-05-25 4 views
1

Я получил очень хороший ответ в своем last question. Идея состояла в том, чтобы обработать N количество входов из командной строки, сохранить первые 9 в переменных и сделать строку с 10 до и далее.Строка Конкатенация в bash с пробелом и цитата вокруг

Я нашел это самым легким решением.

var1="$1" 
var2="$2" 
var3="$3" 
var4="public" 
var5="$5" 
var6="''" 
var7="$7" 
var8="$8" 
var9="$9" 
var10="$(shift 9; IFS=""; echo "$*")" 

echo snmptrap $var1 $var2 $var3 $var4 $var5 $var6 $var7 $var8 $var9 "$var10" 

snmptrap $var1 $var2 $var3 $var4 $var5 $var6 $var7 $var8 $var9 "$var10" 

Выход выглядит так ...

./snmptas -v 2c -c "" 9.48.85.57 "" 1.3.6.1.4.1.2.6.201.3 s s ABC DDEF EFFF 

snmptrap -v 2c -c public 9.48.85.57 '' 1.3.6.1.4.1.2.6.201.3 s s ABCDDEFEFFF 

Но я хотел $ var10 в таком виде

"ABC Ddef EFFF".

Необходимо изменить. Это снимает пространство.

var10="$(shift 9; IFS=""; echo "$*")" 

Как я могу сделать var10 = "ABC DDEF EFFF"?

Благодаря

ответ

1

Подоболочки с эхом не очень уместно там. Лучше так:

shift 9 
var10="$*" 

Если вы хотите кавычки, что как часть стоимости, а затем измените последнюю строку на:

var10=\""$*"\" 

родственна, мне интересно, если ваше лечение var6 делает то, что вы намеревались. Я подозреваю, что это будет ближе к тому, что вы на самом деле предназначены:

snmptrap $var1 $var2 $var3 $var4 $var5 '' $var7 $var8 $var9 "$var10" 

Или это:

var6= 
snmptrap $var1 $var2 $var3 $var4 $var5 "$var6" $var7 $var8 $var9 "$var10" 

Но если мое предположение неверно, и ваше оригинальное лечение работает как задумано, то не важно, игнорировать эти замечания.

0

Чтобы получить переменную var10 содержать кавычки, вам нужно что-то вроде этого:

shift 9 
printf -v "var10" '"%s"' "$*" 

И, если вы хотите процитировать все переменные, такие, что отсутствующие из них имеют место, используйте:

#!/bin/bash 
set -- -v 2c -c "" 9.48.85.57 "" 1.3.6.1.4.1.2.6.201.3 s s ABC DDEF EFFF 

for ((i=1;i<=9;i++)); do 
    printf -v "var$i" '"%s"' "${!i}" 
done 

shift 9 
printf -v "var10" '"%s"' "$*" 

echo snmptrap $var{1..10} 

Чтобы получить скрипт для чтения переданных аргументов вместо написанных в коде, просто закомментируйте строку set --.


Выход будет:

$ ./snmptrap 
snmptrap "-v" "2c" "-c" "" "9.48.85.57" "" "1.3.6.1.4.1.2.6.201.3" "s" "s" "ABC DDEF EFFF" 

, что каждый параметр имеет кавычки не означает, что никаких проблем, чтобы использовать их в качестве входных данных для сценария.