CURL bash satırına ortam değişkeni nasıl dahil edilir?


39

İndirme işlemi tamamlandığında İletimin bildirilmesini sağlamaya çalışıyor.

Bu çalışıyor:

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."}'

... $TR_TORRENT_NAMEbu değişkenin gerçek içeriğini zorlamadığı sürece .

Bir teklif veya başka bir şeyden kaçmam gerekir mi?

Yanıtlar:


58

Tek tırnak içinde kabuk hiçbir şeyi genişletmez. Yerine çift tırnak içine yerleştirin:

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"'."}'

Bakalım bunun nasıl çalıştığını inceleyelim:

$ TR_TORRENT_NAME=MyTorrent
$ echo '{"type": "note", "title": "'"$TR_TORRENT_NAME"'", "body": "'"$TR_TORRENT_NAME completed"'."}'
{"type": "note", "title": "MyTorrent", "body": "MyTorrent completed."}

Kabuk değişkeni göründüğünde, her zaman çift tırnak içindedir. Sonuç olarak, düzgün bir şekilde genişletilir.

Böyle alıntı yapmak biraz zekice. Karakter olarak çift tırnak içeren ve çift tırnaklı dizelerin yanında bulunan tek tırnaklı dizgelere sahibiz. Bunu daha iyi anlamak için, bu parçayı örnek olarak alalım:

 "'"$TR_TORRENT_NAME"'"

Her karakteri sırayla alarak:

  1. "Tek tırnaklı bir dizgenin içindeki değişmez çift alıntı karakteridir. (Kısaltması için, bu dizenin başlangıcı bu parçada gösterilmez.)

  2. ' tek tırnaklı bir dize kapatır.

  3. " çift ​​tırnaklı dize açar.

  4. $TR_TORRENT_NAME çift ​​tırnak içinde genişletilmiş bir kabuk değişkenidir.

  5. " çift ​​tırnaklı dizeyi kapatır.

  6. ' yeni bir tek tırnaklı dize açar.

  7. " Tek tırnaklı dize içine çift tırnaklı bir karakter yerleştirir.


3. ve 5. adımlara mı ihtiyacınız var?
davidfrancis

@davidfrancis 3. ve 5. adımlar atlanırsa, 4. adım kelimesi bölme ve yol adı genişletme işlemine tabi tutulur ve bunlardan biri tüm sorunlara neden olabilir. Biri açıkça sözcük bölme ve yol adı genişletme istemediği sürece , bir kabuk değişkeni daima çift tırnak içinde olmalıdır.
John1024,

Bunun için teşekkürler, hızlı bir örnek verebilir misiniz? Kendi
örneğimde

@davidfrancis TR_TORRENT_NAME="A * B"Ne olduğunu görün ve deneyin .
John1024,

1

Bir değişken değişkeninin etrafına tırnak işaretleri olmadan bash çizgisi kıvrılmalarına bir ortam değişkeni eklemek bu benim için çalıştı:

--header 'PRIVATE-TOKEN: '"$PRIVATE_TOKEN"''

Veya, ilk önce vücut alanı tırnak işaretleri olmadan açıklanan senaryoyu kullanarak:

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"'.}'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.