Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 我可以将$(…)语法用于多行命令吗?_Bash_Shell_Jq_Command Substitution - Fatal编程技术网

Bash 我可以将$(…)语法用于多行命令吗?

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

我经常在长命令中使用反斜杠,为了可读性,我用反斜杠换行来分隔这些命令。当我用$替换反勾号时。。。语法,我会出错

例如,我使用curl和jq内部反引号设置了一个变量,从我的Trello每日待办事项列表中读取并返回card.id和card.name,但不返回特定卡片:

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,从而将它们全部放在一行上。我想我明白了。谢谢…请注意,如果你在$周围加上引号。。。表达式,它将保留换行符。