W pojedynczych cudzysłowach powłoka niczego nie rozwija. Zamiast tego umieść je w cudzysłowach:
curl -u <my-api-token>: \
-X POST https://api.pushbullet.com/v2/pushes \
--header 'Content-Type: application/json' \
--data-binary '{"type": "note", "title": "'"$TR_TORRENT_NAME"'", \
"body": "'"$TR_TORRENT_NAME completed"'."}'
Sprawdźmy, jak to działa, patrząc na:
$ TR_TORRENT_NAME=MyTorrent
$ echo '{"type": "note", "title": "'"$TR_TORRENT_NAME"'", "body": "'"$TR_TORRENT_NAME completed"'."}'
{"type": "note", "title": "MyTorrent", "body": "MyTorrent completed."}
Kiedy pojawia się zmienna powłoki, zawsze znajduje się w cudzysłowach. W związku z tym jest odpowiednio rozwinięty.
Cytowanie tego jest nieco subtelne. Mamy ciągi cudzysłowu, które zawierają znaki podwójnego cudzysłowu i są obok ciągów cudzysłowu. Aby to lepiej zrozumieć, weźmy ten fragment jako przykład:
"'"$TR_TORRENT_NAME"'"
Biorąc kolejno każdą postać:
"
to dosłowny znak podwójnego cudzysłowu, który znajduje się w ciągu pojedynczego cudzysłowu. (Dla zwięzłości początek tego ciągu nie jest pokazany w tym fragmencie).
'
zamyka ciąg cudzysłowu.
"
otwiera ciąg cudzysłowu.
$TR_TORRENT_NAME
jest zmienną powłoki, która jest rozwinięta w cudzysłowie.
"
zamyka ciąg cudzysłowu.
'
otwiera nowy ciąg cudzysłowu.
"
umieszcza znak podwójnego cudzysłowu w ciągu pojedynczego cudzysłowu.
TR_TORRENT_NAME="A * B"
i zobacz, co się stanie.Aby włączyć zmienną środowiskową do zwijania linii bash bez cudzysłowów wokół zawartości zmiennej, działało to dla mnie:
Lub korzystając ze scenariusza, który został po raz pierwszy opisany bez cudzysłowów wokół pola treści:
źródło