Dan*_*Dan 56 bash environment-variables
尝试让传输在下载完成时通知。
这有效:
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."}'
Run Code Online (Sandbox Code Playgroud)
...除了它推送$TR_TORRENT_NAME而不是该变量的实际内容。
我需要逃避一些引用或什么吗?
Joh*_*024 85
在单引号内,shell 不展开任何内容。将它们放在双引号内:
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"'."}'
Run Code Online (Sandbox Code Playgroud)
让我们通过查看以下内容来检查它是如何工作的:
$ TR_TORRENT_NAME=MyTorrent
$ echo '{"type": "note", "title": "'"$TR_TORRENT_NAME"'", "body": "'"$TR_TORRENT_NAME completed"'."}'
{"type": "note", "title": "MyTorrent", "body": "MyTorrent completed."}
Run Code Online (Sandbox Code Playgroud)
当 shell 变量出现时,它总是在双引号内。因此,它被适当地扩展。
这样的引用有点微妙。我们有单引号字符串,其中包含双引号作为字符,并且位于双引号字符串的旁边。为了更好地理解这一点,让我们以这个片段为例:
"'"$TR_TORRENT_NAME"'"
Run Code Online (Sandbox Code Playgroud)
依次取每个字符:
"是单引号字符串内的文字双引号字符。(为简洁起见,此片段中未显示此字符串的开头。)
' 关闭单引号字符串。
" 打开一个双引号字符串。
$TR_TORRENT_NAME 是在双引号内展开的 shell 变量。
" 关闭双引号字符串。
' 打开一个新的单引号字符串。
" 在单引号字符串中放置一个双引号字符。
小智 7
要在 bash 行curl 中包含环境变量而不在变量内容周围加上引号,这对我有用:
--header 'PRIVATE-TOKEN: '"$PRIVATE_TOKEN"''
Run Code Online (Sandbox Code Playgroud)
或者使用最初描述的在 body 字段周围不带引号的场景:
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"'.}'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
97646 次 |
| 最近记录: |