use*_*492 23 shell function fish
我正在创建一个函数(下面),您可以使用该函数提供参数,目录.我测试是否$argv是带-d选项的目录,但似乎不起作用,即使没有提供参数,它也总是返回true.我也试过test -n $argv -a -d $argv测试是$argv空的刺,但是返回test: Missing argument at index 1错误.我该如何测试函数是否提供了任何参数?为什么test -d $argv不工作,根据我的理解,当没有提供参数时它应该是假的,因为空字符串不是目录.
function fcd
if test -d $argv
open $argv
else
open $PWD
end
end
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助.
rid*_*ish 31
count是这样做的正确方法.对于检查是否存在任何参数的常见情况,您可以使用其退出状态:
function fcd
if count $argv > /dev/null
open $argv
else
open $PWD
end
end
Run Code Online (Sandbox Code Playgroud)
要回答第二个问题,test -d $argv如果$argv为空则返回true ,因为POSIX要求在test传递一个参数时,必须"如果$ 1不为null则退出true(0);否则,返回false".所以当$ argv为空时,test -d $argv意味着test -d必须退出true,因为-d它不是空的!哎呀!
编辑添加了遗漏end,感谢Ismail注意到
ste*_*vee 22
至少在鱼2.1+中,您可以命名您的参数,然后允许更多的语义代码:
function fcd --argument-names 'filename'
if test -n "$filename"
open $filename
else
open $PWD
end
end
Run Code Online (Sandbox Code Playgroud)
if not set -q argv[1]
echo 'none'
else
echo 'yes'
end
Run Code Online (Sandbox Code Playgroud)
从man set页面:
set ( -q | --query ) [SCOPE_OPTIONS] VARIABLE_NAMES...
Run Code Online (Sandbox Code Playgroud)
o -q 或 --query 测试是否定义了指定的变量名称。不输出任何内容,但内置退出状态是指定的未定义变量的数量。
$argv是一个列表,所以你想查看第一个元素,如果该列表中有元素:
if begin; test (count $argv) -gt 0; and test -d $argv[1]; end
open $argv[1]
else
open $PWD
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10209 次 |
| 最近记录: |