鱼壳中的字符串操作

发布于 2024-10-14 15:47:33 字数 479 浏览 6 评论 0原文

我希望编写一个 Fish shell 脚本来自动将 JAVA_HOME 初始化为当前配置的 java-alternative。

在 bash 中,它看起来像这样(对不起,丑陋的双目录名)

j=`update-alternatives --query javac | grep Value:`
JAVA_HOME=`dirname ${j#Value:}`
JAVA_HOME=`dirname $JAVA_HOME`
export JAVA_HOME

鱼呢?

set j (update-alternatives --query javac | grep Value:)
set JAVA_HOME (dirname ${j#Value:}) <-- this won't work!!
set JAVA_HOME (dirname $JAVA_HOME)
set --export JAVA_HOME

i wish to write a fish shell script to automatically initialize JAVA_HOME to current configured java-alternative.

In bash it would look like this (sorry for the ugly double dirname)

j=`update-alternatives --query javac | grep Value:`
JAVA_HOME=`dirname ${j#Value:}`
JAVA_HOME=`dirname $JAVA_HOME`
export JAVA_HOME

what about fish?

set j (update-alternatives --query javac | grep Value:)
set JAVA_HOME (dirname ${j#Value:}) <-- this won't work!!
set JAVA_HOME (dirname $JAVA_HOME)
set --export JAVA_HOME

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

花落人断肠 2024-10-21 15:47:33

Fish shell 现在有一个用于字符串操作的 string 内置命令。这是在版本 2.3.0(2016 年 5 月)中添加的。

例如,在本例中,我们可以使用 string Replace 来删除 Value: 子字符串:

set j (update-alternatives --query javac | grep Value: | string replace 'Value: ' '')
set --export JAVA_HOME (dirname (dirname $j))

string 还可以做更多的事情。来自字符串命令文档

Synopsis

string length [(-q | --quiet)] [STRING...]
string sub [(-s | --start) START] [(-l | --length) LENGTH] [(-q | --quiet)]
           [STRING...]
string split [(-m | --max) MAX] [(-r | --right)] [(-q | --quiet)] SEP
             [STRING...]
string join [(-q | --quiet)] SEP [STRING...]
string trim [(-l | --left)] [(-r | --right)] [(-c | --chars CHARS)]
            [(-q | --quiet)] [STRING...]
string escape [(-n | --no-quoted)] [STRING...]
string match [(-a | --all)] [(-i | --ignore-case)] [(-r | --regex)]
             [(-n | --index)] [(-q | --quiet)] [(-v | --invert)] PATTERN [STRING...]
string replace [(-a | --all)] [(-i | --ignore-case)] [(-r | --regex)]
               [(-q | --quiet)] PATTERN REPLACEMENT [STRING...]

The fish shell now has a string builtin command for string manipulation. This was added in version 2.3.0 (May 2016).

E.g. in this case, we could use string replace to remove the Value: substring:

set j (update-alternatives --query javac | grep Value: | string replace 'Value: ' '')
set --export JAVA_HOME (dirname (dirname $j))

There's lots more that string can do. From the string command documentation:

Synopsis

string length [(-q | --quiet)] [STRING...]
string sub [(-s | --start) START] [(-l | --length) LENGTH] [(-q | --quiet)]
           [STRING...]
string split [(-m | --max) MAX] [(-r | --right)] [(-q | --quiet)] SEP
             [STRING...]
string join [(-q | --quiet)] SEP [STRING...]
string trim [(-l | --left)] [(-r | --right)] [(-c | --chars CHARS)]
            [(-q | --quiet)] [STRING...]
string escape [(-n | --no-quoted)] [STRING...]
string match [(-a | --all)] [(-i | --ignore-case)] [(-r | --regex)]
             [(-n | --index)] [(-q | --quiet)] [(-v | --invert)] PATTERN [STRING...]
string replace [(-a | --all)] [(-i | --ignore-case)] [(-r | --regex)]
               [(-q | --quiet)] PATTERN REPLACEMENT [STRING...]
凉宸 2024-10-21 15:47:33

重击:

j=$(update-alternatives --query javac | sed -n '/Value: /s///p')
export JAVA_HOME=${j%/*/*}

鱼:

set j (update-alternatives --query javac | sed -n '/Value: /s///p')
set --export JAVA_HOME (dirname (dirname $j))

set --export JAVA_HOME (dirname (dirname (update-alternatives --query javac | sed -n '/Value: /s///p')))

Bash:

j=$(update-alternatives --query javac | sed -n '/Value: /s///p')
export JAVA_HOME=${j%/*/*}

Fish:

set j (update-alternatives --query javac | sed -n '/Value: /s///p')
set --export JAVA_HOME (dirname (dirname $j))

or

set --export JAVA_HOME (dirname (dirname (update-alternatives --query javac | sed -n '/Value: /s///p')))
蓝天 2024-10-21 15:47:33

您可以使用 expr 和 regexp 来代替 sed,例如:

$ set a /path/to/some/folder/file.extension

命令:

$ expr "//$a" : '.*/\([^.]*\)\..*

提取不带扩展名的文件基本名。

请参阅man expr

file

提取不带扩展名的文件基本名。

请参阅man expr

Instead of sed, u could make use of expr with a regexp, for example:

$ set a /path/to/some/folder/file.extension

the command:

$ expr "//$a" : '.*/\([^.]*\)\..*

extract the file basename without extension.

See man expr

file

extract the file basename without extension.

See man expr

皓月长歌 2024-10-21 15:47:33

Fish shell:

~> set JAVA_HOME (readlink -f /usr/bin/javac | sed "s:/bin/javac::")
~> echo $JAVA_HOME

输出(示例):

/usr/lib/jvm/java-8-openjdk-amd64

您也可以添加到 ~/.config/fish/config.fish 这行:

set JAVA_HOME (readlink -f /usr/bin/javac | sed "s:/bin/javac::")

WBR

Fish shell:

~> set JAVA_HOME (readlink -f /usr/bin/javac | sed "s:/bin/javac::")
~> echo $JAVA_HOME

Output (example):

/usr/lib/jvm/java-8-openjdk-amd64

Also u can add to ~/.config/fish/config.fish this line:

set JAVA_HOME (readlink -f /usr/bin/javac | sed "s:/bin/javac::")

WBR

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文