【发布时间】:2016-09-28 17:39:22
【问题描述】:
给定一个输入变量,比如 usr/bin 和以下 PATH
echo $PATH
/usr/local/bin /usr/bin /bin /usr/sbin /sbin /usr/local/sbin /Developer/bin
我如何编写(在鱼壳中)给定字符串/输入的函数可以从我的 PATH 变量中删除该路径? -> 理想情况下删除第一次出现的情况(与删除所有出现的此类变量的情况相比)
我正在考虑写一个小函数,比如
deleteFromPath usr/bin
用 Perl/python/ruby 这样的脚本语言而不是 fish shell 会更好吗?
for x in $list
if [ $x = $argv ]
//delete element x from list -> How?
end
end
【问题讨论】:
-
有什么原因让您跳到 perl/python/ruby 而不是 POSIX shell?
-
IFS=: read -r -a path_entries <<<"$PATH"; for idx in "${!path_entries[@]}"; do for arg; do [[ ${path_entries[$idx]} = "$arg" ]] && unset path_entries[$idx]; done; done; printf -v PATH '%s:' "${path_entries[@]}"; PATH=${PATH%':'}让我印象深刻,它是对正确性持谨慎态度的 bash 实现相当理智。 fish 真的不是为编写脚本而构建的;它是一个非常交互式 shell。 -
@CharlesDuffy:
fish不支持POSIX子串删除技术? -
@Inian,fish 根本没有写成 POSIX shell。他们本可以借用任何给定的功能,但我不会花时间了解他们做了什么或没做什么。
-
@CharlesDuffy:干杯!只是想澄清一下,然后再使用相同的答案发布答案! :)