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

Поэтому я хочу добавить 10 секунд. Команда, чтобы сделать это, появилась здесь .

Проиллюстрировать:

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

Проблема, с которой я сталкиваюсь в этом коде, заключается в том, что если я повторяю переменную $CALL , она дает:

 date -d 12:51:19 today + 10 seconds +%H:%M:%S 

Правильная версия этой строки будет выглядеть так:

 date -d "12:48:03 today + 10 seconds" +'%H:%M:%S' 

Но если я закрою имя переменной в кавычках, вот так:

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

… он интерпретируется как строковый литерал, и если вы его эхо, он дает:

 date -d $ENDTIME +%H:%M:%S 

Так что мне нужно сделать, это вызвать переменную таким образом, чтобы ее значение было заменено на функцию и было завершено с помощью двойных кавычек («), но избегайте того, чтобы имя переменной читалось как буквальная строка. Я очень смущен этим , Я скучаю по Питону!

  • Как завершить приостановленный процесс в SSH?
  • Просмотреть расширенные атрибуты с помощью coreutils ls на Mac
  • Как создать скрипт, который запускает другой скрипт в отдельном окне терминала и не ждет?
  • Как подключить вывод к sh скрипту и передать его команде?
  • Как использовать для вывода dpkg -L с номерами строк?
  • Как это переформатирование текста происходит с ack?
  • Есть ли способ переключиться на «su -» после переключения пользователей через «su»?
  • Что произошло после sudo -s
  • 3 Solutions collect form web for “В bash, как вызвать переменную и обернуть кавычки вокруг ее значения как часть команды, не заставляя имя переменной стать строковым литералом?”

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

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

    Обратите внимание, что вам не нужно указывать при выполнении var = $ (…), но обычно вы используете var = "many words":

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

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

     a="that's nice"; echo "$a" # result: that's nice a='that "is nice'; echo "$a" # result: that "is nice 

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

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

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

     date -d "22:46:37 today + 10 seconds" +'%H:%M:%S' 

    Поместите одинарные кавычки в свою двойную 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 
    Linux и Unix - лучшая ОС в мире.