cdcl() { vlog -source -lint +define+"${1:-DEBUG}" -sv "${2:-*.sv}"; }
上面是我的功能,我在 .bashrc 文件中定义了它。下面是我的命令行
% cdcl 'RANDOM' 'abc.sv'
这给我>>vlog -source -lint +define+RANDOM -sv abc.sv
有没有办法,我可以跳过给出第一个占位符值,而只在命令行中给出第二个占位符。
答案1
您可以检查您的函数是否仅使用一个参数调用,并以不同的方式处理这种情况:
cdcl() {
if (($# == 1)); then
vlog -source -lint +define+DEBUG -sv "$1"
else
vlog -source -lint +define+"${1:-DEBUG}" -sv "${2:-*.sv}"
fi
}
答案2
由于该函数使用带冒号的默认值扩展,即 ie"${1:-DEBUG}"
和 not "${1-DEBUG}"
,空值也会触发使用默认值。您可以使用""
或传递空值''
,因此
cdcl "" abc.sv
应该导致函数运行
vlog -source -lint +define+DEBUG -sv abc.sv
如果使用该函数"${1-DEBUG}"
,它只会触发未设置值的默认值,并且不可能$1
在$2
,它只会触发未设置值的默认值,并且在已定义。它们必须按顺序排列,列表中不能有“漏洞”。
并不是说传递一个像这样的空字符串是一个很好的解决方案,并且您可能想要决定例如getopt
在函数内使用以使其接受类似的参数cdcl -d RANDOM -s abc.sv
,再次使用适当的默认值。
答案3
如果我正确理解你的问题,你想跳过向脚本提供第一个参数,以便它使用RANDOM
但不必键入它。您可以恢复参数的顺序。
cdcl() {
local f_pattern="${1:-*.sv}"
echo "vlog -source -lint +define+${2:-DEBUG} -sv $f_pattern"
# vlog -source -lint +define+"${2:-DEBUG}" -sv "$f_pattern"
}
我用echo
那里来打印命令及其将使用的参数。如果您有信心,请删除echo