How to assign the output of a Bash command to a variable?

This question already has an answer here:

  • How to set a variable to the output of a command in Bash? 13 answers

  • Try:

    pwd=`pwd`
    

    or

    pwd=$(pwd)
    

    Notice no spaces after the equals sign.

    Also as Mr. Weiss points out; you don't assign to $pwd , you assign to pwd .


    In shell you assign to a variable without the dollar-sign:

    TEST=`pwd`
    echo $TEST
    

    that's better (and can be nested) but is not as portable as the backtics:

    TEST=$(pwd)
    echo $TEST
    

    Always remember: the dollar-sign is only used when reading a variable.


    In this specific case, note that bash has a variable called PWD that contains the current directory: $PWD is equivalent to `pwd` . (So do other shells, this is a standard feature.) So you can write your script like this:

    #!/bin/bash
    until [ "$PWD" = "/" ]; do
      echo "$PWD"
      ls && cd .. && ls 
    done
    

    Note the use of double quotes around the variable references. They are necessary if the variable (here, the current directory) contains whitespace or wildcards ( [?* ), because the shell splits the result of variable expansions into words and performs globbing on these words. Always double-quote variable expansions "$foo" and command substitutions "$(foo)" (unless you specifically know you have not to).

    In the general case, as other answers have mentioned already:

  • You can't use whitespace around the equal sign in an assignment: var=value , not var = value
  • The $ means “take the value of this variable”, so you don't use it when assigning: var=value , not $var=value .
  • 链接地址: http://www.djcxy.com/p/57196.html

    上一篇: 将AWK结果分配给变量

    下一篇: 如何将Bash命令的输出分配给变量?