В bash, как вызвать переменную и обернуть кавычки вокруг ее значения как часть команды, не превращая имя переменной в строковый литерал?

# mdconfig -a -t malloc -o compress -o reserve -s 512m -u 7
# newfs -U /dev/md7
# mount /dev/md7 /mnt/ramdrive
3
23.05.2017, 15:39
3 ответа

Для полноты картины вам не нужны ни все эти ("), ни последний $ (echo ...) . { {1}} Вот упрощенная версия ваших назначений, которые производят тот же эффект :

STARTIME=$(date +"%T")
ENDTIME="$STARTIME today + 10 seconds"
CALL="date -d '$ENDTIME' +'%H:%M:%S'"

Обратите внимание, что вам не нужно цитировать, когда вы выполняете var = $ (...), но обычно вы это делаете {{ 1}} с var = "many words":

a=$(echo 'a    b'); echo "$a" # result: a    b

Внутри (") a (') не имеет особого значения, и наоборот, например:

a="that's nice"; echo "$a" # result: that's nice
a='that "is nice'; echo "$a" # result: that "is nice
7
27.01.2020, 21:09

Вы можете отредактировать оператор вызова следующим образом:

CALL="$(echo date -d \"$ENDTIME\" +\'%H:%M:%S\')"

\ можно использовать для экранирования символов « и '. Теперь echo $ CALL будет выводиться как:

date -d "22:46:37 today + 10 seconds" +'%H:%M:%S'
3
27.01.2020, 21:09

Поместите одинарные кавычки в двойные кавычки ENDTIME ], например так:

ENDTIME="'$STARTIME today + 10 seconds'"
CALL="$(echo date -d "$ENDTIME" +'%H:%M:%S')"

Она должна дать

date -d '19:35:28 today + 10 seconds' +%H:%M:%S
0
27.01.2020, 21:09

Теги

Похожие вопросы