#zsh
#зш
Вопрос:
Это моя функция
function print_doc_json() {
docId=$1
echo '{ ":d": { "S": "$(docId)" }}'
}
Я хочу, чтобы результат print_doc_json abc123
был { ":d": { "S": "abc123" }}
Однако это получилось как { ":d": { "S": "$(docId)" }}
. Он DocId
не заменяется.
Как я могу получить замену строки в строке, уже заключенной в пару кавычек?
Комментарии:
1. Если у вас есть
jq
в наличии (и я рекомендую использовать его), используйтеjq -n --arg d "$docId" '{":d": {S: $d}}'
вместоecho
.
Ответ №1:
Есть две ошибки. Во-первых, подстановка переменных выполняется следующим образом: ${docId}
, а не так: $(docId)
Во-вторых, если вы заключаете строку в одинарные кавычки ( '
), подстановка переменных внутри не выполняется — вы должны использовать двойные кавычки ( "
) . Имейте в виду, что в этом случае вы должны экранировать двойные кавычки, которые вы хотите напечатать:
function print_doc_json() {
docId=$1
echo "{ ":d": { "S": "${docId}" }}"
}
В качестве альтернативы вы можете использовать одинарные кавычки снаружи, но тогда вы также должны выполнить подстановку снаружи:
function print_doc_json() {
docId=$1
echo '{ ":d": { "S": "'${docId}'" }}'
}
Это три объединенные строки: '{ ":d": { "S": "'
, ${docId}
и '" }}'
.
Комментарии:
1. Это хрупкое, предполагающее, что
docId
оно не содержит пробелов, двойных кавычек или других символов, нуждающихся в экранировании.