Correct Bash and shell script variable capitalization

I run across many shell scripts with variables in all caps, and I've always thought that there is a severe misunderstanding with that. My understanding is that, by convention (and perhaps by necessity long ago), environment variables are in all-caps.

But in modern scripting environments like Bash, I have always preferred the convention of lower-case names for temporary variables, and upper-case ones only for exported (ie environment) variables. For example:

#!/usr/bin/env bash
year=`date +%Y`
echo "It is $year."
export JAVA_HOME="$HOME/java"

That has always been my take on things. Are there any authoritative sources which either agree or disagree with this approach, or is it purely a matter of style?


By convention, environment variables ( PAGER , EDITOR , ...) and internal shell variables ( SHELL , BASH_VERSION , ...) are capitalized. All other variable names should be lower case.

Remember that variable names are case-sensitive; this convention avoids accidentally overriding environmental and internal variables.

Keeping to this convention, you can rest assured that you don't need to know every environment variable used by UNIX tools or shells in order to avoid overwriting them. If it's your variable, lowercase it. If you export it, uppercase it.


Any naming conventions followed consistently will always help. Here are a few helpful tips for shell variable naming:

  • Use all caps and underscores for exported variables and constants. Use a common prefix whenever applicable so that related variables stand out.

    Examples:

  • Exported variables with a common prefix: JOB_HOME JOB_LOG JOB_TEMP JOB_RUN_CONTROL
  • Constants: PI MAX_FILES OK ERROR WARNING
  • Use "snake case" ( all lowercase and underscores ) for all variables that are scoped to a single script or a block.

    Examples: input_file first_value max_amount num_errors

    Mixed case when local variable has some relationship with an environment variable, like: old_IFS old_HOME

  • Use a leading underscore for "private" variables and functions. This is especially relevant if you ever write a shell library where functions within a library file or across files need to share variables, without ever clashing with anything that might be similarly named in the main code.

    Examples: _debug _debug_level _current_log_file

  • Never use camel case . This will make sure we don't run into bugs caused by case typos. Remember, shell variables are case sensitive .

    Examples: inputArray thisLooksBAD , numRecordsProcessed , veryInconsistent_style


  • See also:

  • The Open Group Base Specifications Issue 7 - Environment Variables

  • I do what you do. I doubt there's an authoritative source, but it seems a fairly widespread de-facto standard.

    链接地址: http://www.djcxy.com/p/25570.html

    上一篇: 在while循环内修改的变量不会被记住

    下一篇: 修正Bash和shell脚本可变大小写