麻烦写鱼如果声明

时间:2016-04-08 06:07:17

标签: shell if-statement syntax zsh fish

所以我有以下if语句(最初来自我的.zshrc):

ALTER FUNCTION [dbo].[TfSplitTemplateVariable]
    (
      @String NVARCHAR(MAX),
      @Delimiter NVARCHAR(2)
    )
RETURNS @result TABLE (Id INT IDENTITY PRIMARY KEY, Data NVARCHAR (MAX))
AS
BEGIN
    DECLARE @start INT, @end INT
    SET @start = 1

    WHILE CHARINDEX(@Delimiter, @String, @start) > 0
    BEGIN
        SET @start  = CHARINDEX(@Delimiter, @String, @start) + LEN(@Delimiter)
        SET @end    = CHARINDEX(@Delimiter, @String, @start)

        IF @end > @start
        BEGIN
            INSERT @result(Data) VALUES(SUBSTRING(@String, @start, @end - @start))
        END
        ELSE
        BEGIN
            BREAK
        END

        SET @start = @end + LEN(@Delimiter)
    END

    RETURN
END
GO

现在我正在尝试将其移植到我的if [ -n "${NVIM_LISTEN_ADDRESS+x}" ]; then alias h='nvr -o' alias v='nvr -O' alias t='nvr --remote-tab' fi ,我知道它与if上的config.fish有关,但我无法弄清楚语法。

1 个答案:

答案 0 :(得分:2)

[没问题。 fish中两个不同的部分是+ x扩展修饰符和循环语法。

在zsh中,"${NVIM_LISTEN_ADDRESS+x}"如果设置了x,则评估为$NVIM_LISTEN_ADDRESS,否则为空;然后将其进行比较以查看它是否为空。这似乎是一种迂回的方式来检查变量是否已设置。

关于循环,鱼块始终以end结尾,并且不需要thendo

所以这是最直接捕鱼的港口:

if [ -n "$NVIM_LISTEN_ADDRESS" ]
    alias h='nvr -o'
    alias v='nvr -O'
    alias t='nvr --remote-tab'
end

这更具惯用性:

if set -q NVIM_LISTEN_ADDRESS
    abbr h 'nvr -o'
    abbr v 'nvr -O'
    abbr t 'nvr --remote-tab'
end

使用扩展到位的鱼abbreviation feature