What is the use case of noop [:] in bash?

后端 未结 12 924
滥情空心
滥情空心 2020-12-12 13:07

I searched for noop in bash (:), but was not able to find any good information. What is the exact purpose or use case of this operator?

I tried following and it\'s w

12条回答
  •  温柔的废话
    2020-12-12 13:20

    Sometimes no-op clauses can make your code more readable.

    That can be a matter of opinion, but here's an example. Let's suppose you've created a function that works by taking two unix paths. It calculates the 'change path' needed to cd from one path to another. You place a restriction on your function that the paths must both start with a '/' OR both must not.

    function chgpath() {
        # toC, fromC are the first characters of the argument paths.
        if [[ "$toC" == / && "$fromC" == / ]] || [[ "$toC" != / && "$fromC" != / ]]
        then
            true      # continue with function
        else
            return 1  # Skip function.
        fi
    

    Some developers will want to remove the no-op but that would mean negating the conditional:

    function chgpath() {
        # toC, fromC are the first characters of the argument paths.
        if [[ "$toC" != / || "$fromC" == / ]] && [[ "$toC" == / || "$fromC" != / ]]
        then
            return 1  # Skip function.
        fi
    

    Now -in my opinion- its not so clear from the if-clause the conditions in which you'd want to skip doing the function. To eliminate the no-op and do it clearly, you would want to move the if-clause out of the function:

        if [[ "$toC" == / && "$fromC" == / ]] || [[ "$toC" != / && "$fromC" != / ]]
        then
            cdPath=$(chgPath pathA pathB)   # (we moved the conditional outside)
    

    That looks better, but many times we can't do this; we want the check to be done inside the function.

    So how often does this happen? Not very often. Maybe once or twice a year. It happens often enough, that you should be aware of it. I don't shy away from using it when I think it improves the readability of my code (regardless of the language).

提交回复
热议问题