Bash 我可以将$(…)语法用于多行命令吗?
我经常在长命令中使用反斜杠,为了可读性,我用反斜杠换行来分隔这些命令。当我用$替换反勾号时。。。语法,我会出错 例如,我使用curl和jq内部反引号设置了一个变量,从我的Trello每日待办事项列表中读取并返回card.id和card.name,但不返回特定卡片:Bash 我可以将$(…)语法用于多行命令吗?,bash,shell,jq,command-substitution,Bash,Shell,Jq,Command Substitution,我经常在长命令中使用反斜杠,为了可读性,我用反斜杠换行来分隔这些命令。当我用$替换反勾号时。。。语法,我会出错 例如,我使用curl和jq内部反引号设置了一个变量,从我的Trello每日待办事项列表中读取并返回card.id和card.name,但不返回特定卡片: AllCardsInDTL=\ `\ curl -s "https://api.trello.com/1/lists/$DailyTasksListID/cards\ ?$WhoMe\ &fields=name,id
AllCardsInDTL=\
`\
curl -s "https://api.trello.com/1/lists/$DailyTasksListID/cards\
?$WhoMe\
&fields=name,id,pos\
"\
| jq '\
.[] | \
if .name | test ("Tasks here are copied.*") \
then empty \
else .id, .name \
end \
'\
` # End of AllCardsInDTL=
这没有问题,shell变量由ID和Name值的交替行组成
但是如果我用$替换BackQuotes,我从jq得到一个错误:
从错误中,我不清楚是不是实际终止了由$启动的命令,还是在$内。。。反斜杠并没有像我预期的那样被解释
我想能够使用美元。。。语法,因为有时我想将一个子shell嵌套在另一个子shell中,这很难使用反引号。您当然可以使用\来转义$中的行尾。。。表示还要注意的是,在单引号内的jq表达式中不需要这些
我可能会这样写:
AllCardsInDTL=$(
curl -s "https://api.trello.com/1/lists/$DailyTasksListID/cards\
?$WhoMe\
&fields=name,id,pos" |
jq '.[] |
if .name | test ("Tasks here are copied.*")
then empty
else .id, .name
end
'
)
我无法测试这一点,因为我没有$DailyStasksListId的有用值,目前也不具备向trello进行身份验证的能力。您当然可以使用\来转义$。。。表示还要注意的是,在单引号内的jq表达式中不需要这些
我可能会这样写:
AllCardsInDTL=$(
curl -s "https://api.trello.com/1/lists/$DailyTasksListID/cards\
?$WhoMe\
&fields=name,id,pos" |
jq '.[] |
if .name | test ("Tasks here are copied.*")
then empty
else .id, .name
end
'
)
我无法测试这一点,因为我没有$DailyStasksListId的有用值,目前也无法向trello进行身份验证。是的。演示:
echo $(echo foo
echo bar
echo baz
)
输出:
foo bar baz
对。演示:
echo $(echo foo
echo bar
echo baz
)
输出:
foo bar baz
请显示将反勾号替换为$…,或至少两行相关代码的代码。请显示将反勾号替换为$…,或至少两行相关代码的代码。感谢您提供关于在jq singlequotes中不需要反斜杠的提示。我注意到,在您的版本中,curl和jq之间的直线末端的管道没有反斜杠。这在bash脚本中通常是允许的,还是仅在$。。。这里?这在bash脚本中通常是允许的。我真的很喜欢分解长的命令行,以便能够更容易地读取流,所以这篇技巧将为我节省大量的反斜杠。谢谢。谢谢你告诉我不要在jqsinglequotes中使用反斜杠。我注意到,在您的版本中,curl和jq之间的直线末端的管道没有反斜杠。这在bash脚本中通常是允许的,还是仅在$。。。这里?这在bash脚本中通常是允许的。我真的很喜欢分解长的命令行,以便能够更容易地读取流,所以这篇技巧将为我节省大量的反斜杠。谢谢,啊!内部的三个echo命令将每行放置一个单词,但随后会再次发送到echo,从而将它们全部放在一行上。我想我明白了。谢谢…请注意,如果你在$周围加上引号。。。表达式,它将保留新行。啊!内部的三个echo命令将每行放置一个单词,但随后会再次发送到echo,从而将它们全部放在一行上。我想我明白了。谢谢…请注意,如果你在$周围加上引号。。。表达式,它将保留换行符。