cio*_*ano 3 shell scripting fish
给定一个输入变量说 usr/bin 和以下路径
echo $PATH
/usr/local/bin /usr/bin /bin /usr/sbin /sbin /usr/local/sbin /Developer/bin
Run Code Online (Sandbox Code Playgroud)
我如何编写(在鱼壳中)一个函数,该函数给出字符串/输入可以从我的 PATH 变量中删除该路径?-> 理想情况下删除第一个出现的变量(vs 删除所有出现的此类变量)
我正在考虑编写一个小函数,例如
deleteFromPath usr/bin
Run Code Online (Sandbox Code Playgroud)
用像 Perl/python/ruby 这样的脚本语言而不是鱼壳来编写它会更好吗?
for x in $list
if [ $x = $argv ]
//delete element x from list -> How?
end
end
Run Code Online (Sandbox Code Playgroud)
这在鱼中很容易做到。
使用set -e,您不仅可以删除整个变量,还set -e PATH[2]可以删除列表中的元素,例如删除第二个元素(鱼从 1 开始计数列表索引)。
使用contains -i,您可以找到元素所在的索引。
所以你会想要调用set -e PATH[(contains -i $argv $PATH)].
修复了一些错误处理和边缘情况后,这看起来像
function deleteFromPath
# This only uses the first argument
# if you want more, use a for-loop
# Or you might want to error `if set -q argv[2]`
# The "--" here is to protect from arguments or $PATH components that start with "-"
set -l index (contains -i -- $argv[1] $PATH)
# If the contains call fails, it returns nothing, so $index will have no elements
# (all variables in fish are lists)
if set -q index[1]
set -e PATH[$index]
else
return 1
end
end
Run Code Online (Sandbox Code Playgroud)
请注意,这会比较路径字符串,因此您需要deleteFromPath /usr/bin使用前导“/”调用。否则它不会找到该组件。
| 归档时间: |
|
| 查看次数: |
351 次 |
| 最近记录: |