在引号处拆分字符串

时间:2021-06-21 20:17:49

标签: zsh

我的用例:bw unlock 'my password' 输出几行,其中一行以 $ export BW_SESSION=" 开头。我想将引号之间的内容保存到一个名为 BW_SESSION 的变量中。

示例 bw unlock 输出:

Your vault is now unlocked!

To unlock your vault, set your session key to the `BW_SESSION` environment variable. ex:
$ export BW_SESSION="0d7hzk3i9UaX0Pbq9YlG5VG11ozOGZQ1o304orui1orxHeh7Lk2GIqWCcFN3+hnpMnHqIGjqOlsgQ5tgaI9w1A=="
> $env:BW_SESSION="0d7hzk3i9UaX0Pbq9YlG5VG11ozOGZQ1o304orui1orxHeh7Lk2GIqWCcFN3+hnpMnHqIGjqOlsgQ5tgaI9w1A=="

You can also pass the session key to any command with the `--session` option. ex:
$ bw list items --session 0d7hzk3i9UaX0Pbq9YlG5VG11ozOGZQ1o304orui1orxHeh7Lk2GIqWCcFN3+hnpMnHqIGjqOlsgQ5tgaI9w1A==

我的尝试:

lineWithSessionID=$(bw unlock 'my password' |  grep '$ export BW_SESSION="') ;
quotesToSpaces=(${(s/\"/)lineWithSessionID}) ;
splitOnSpaces=(${(s/ /)quotesToSpaces}) ; 
BW_SESSION=$splitOnSpaces[4] ;
echo $BW_SESSION

我希望 quotesToSpaces=(${(s/\"/)lineWithSessionID}) 能够真正完成这项工作并在引号处拆分一个字符串,但它间歇性地用空格替换引号,并且根本不起作用

1 个答案:

答案 0 :(得分:1)

你想得太复杂了:再做一个正则表达式匹配:

if [[ $lineWithSessionID =~ \"(.*)\" ]] 
then
  BW_SESSION=$match[1]
else
  echo Unexpected content: $lineWithSessionID 
fi

如果你很勇敢并且真的可以信任输出bw unlock,你甚至可以做一个

eval $lineWithSessionID[3,-1]

设置 BW_SESSION 并将其放入环境中,但当然伴随着 eval 的所有危险....