터미널이 시작된 후 모든 새 변수를 표시하는 방법은 무엇입니까?

터미널이 시작된 후 모든 새 변수를 표시하는 방법은 무엇입니까?

종종 터미널 세션에서 다음과 같은 작업을 수행합니다.

$ Source="/bin"

$ AllFiles=$(ls $Source/* | wc -l)

$ echo $AllFiles
159

현재 터미널 세션에서 정의한 변수를 표시하기 위해 , 등을 입력하는 echo $Source것은 지루한 일입니다 . echo $AllFiles내가 사용하면 printenv화면은 내가 정의하지 않은 것들로 가득 차 있습니다. 내가 사용하면 declare -p같은 일이 일어납니다.

이 터미널 세션에서 정의한 변수만 표시하려면 어떻게 해야 합니까?

답변1

declare -p찾고 있는 변수뿐만 아니라 찾고 있지 않은 121개의 다른 변수도 포함하는 환경 변수 외부에 정의된 모든 변수를 표시합니다.

비밀은 gnome-terminal열 때 기본 변수를 캡처하고 현재 변수 목록에서 이를 빼서 새 변수만 표시하는 것입니다.

사용listvar

함수 생성에 대한 지침은 listvar다음과 같습니다. 함수가 어떻게 작동하는지 확인하려면 listvar터미널을 열고 다음을 입력하세요.

$ listvar

$ hey="Hey World :/"

$ listvar
declare -- hey="Hey World :/"

$ Word=Something

$ Number=25

$ Ubuntu=16.04

$ listvar
declare -- Number="25"
declare -- Ubuntu="16.04"
declare -- Word="Something"
declare -- hey="Hey World :/"

만들기listvar

다음을 끝에 추가하세요 ~/.bashrc.

# Below must be at end of ~/.bashrc
# Display newly created variables
function listvar () {

    # Get current variable list
    mapfile -t CurrVars <<< "$(declare -p)"

    # Loop through each current variable
    for CurrVar in "${CurrVars[@]}" ; do

        # Skip over unwanted variables that are dynamic
        [[ "$CurrVar" == "declare -a BASH_"*    ]] && continue
        [[ "$CurrVar" == "declare -a FUNCNAME"* ]] && continue
        [[ "$CurrVar" == "declare -a PIPESTAT"* ]] && continue
        [[ "$CurrVar" == "declare -- _=\"\""*   ]] && continue
#        [[ "$CurrVar" == "declare -- sh="*      ]] && continue

        # Skip over variables used in our listvar function
        [[ "$CurrVar" == "declare -a SaveVar"*  ]] && continue
        [[ "$CurrVar" == "declare -- SaveVar"*  ]] && continue
        [[ "$CurrVar" == "declare -a CurrVar"*  ]] && continue
        [[ "$CurrVar" == "declare -- CurrVar"*  ]] && continue
        [[ "$CurrVar" == "declare -a OldVar"*   ]] && continue
        [[ "$CurrVar" == "declare -- OldVar"*   ]] && continue
        [[ "$CurrVar" == 'declare -- _="SaveV'* ]] && continue
        [[ "$CurrVar" == 'declare -- _="listv'* ]] && continue

        OldVar=false
        for SaveVar in "${SaveVars[@]}" ; do
            # Is current variable existing at time of save?
            [[ "$CurrVar" == "$SaveVar" ]]         && { OldVar=true ; break ; }
        done
        [[ $OldVar == false ]] && echo "$CurrVar"
    done

} # listvar


# Empty array to prevent doubling everytime ~/.bashrc is resourced
SaveVars=()
# Save variable list before user creates new ones in shell
mapfile -t SaveVars <<< "$(declare -p)"

파일을 저장 ~/.bashrc하고 새 터미널 세션을 열어 listvar기능을 사용하세요.

관련 정보