記事検索
月別アーカイブ
アクセスカウンター

    タグ絞り込み検索
    2015年09月15日14:25シェルスクリプトで一時的代入の挙動(2)

    ここからの続き

    name=value command 構文

    commandのところをいろいろ変えて、コマンド行での変数代入が永続的かどうか調べてみた。

    • nullコマンド(built-in)
    • trueコマンド(freebsd shとdashではbuilt-in、bashでは外部コマンド→うそでしたbuilt-inでした)
    • ユーザ定義関数
    • 外部コマンド
    テストスクリプト
    X1=YES :
    echo "X1=${X1-NO}"
    printenv X1
    
    X2=YES true
    echo "X2=${X2-NO}"
    printenv X2
    
    g() {
        :
    }
    X3=YES g
    echo "X3=${X3-NO}"
    printenv X3
    
    X4=YES cal >/dev/null
    echo "X4=${X4-NO}"
    printenv X4
    
    f() {
        X=FUNC
    }
    X=CMD f
    echo "X=${X-NO}"
    printenv X
    
    fbsd sh
    X1=YES
    X2=NO
    X3=NO
    X4=NO
    X=NO
    
    bash
    X1=NO
    X2=NO
    X3=NO
    X4=NO
    X=NO
    
    bash -o posix
    X1=YES
    YES
    X2=NO
    X3=YES
    YES
    X4=NO
    X=FUNC
    FUNC
    
    dash
    X1=YES
    X2=NO
    X3=YES
    X4=NO
    X=FUNC
    
    結果

    永続的か?

    Shell nullコマンド 関数 trueコマンド 外部コマンド
    fbsd sh YES NO NO NO
    bash NO NO NO NO
    bash -o posix YES+環境変数 YES+環境変数 NO NO
    dash YES YES NO NO

    コマンド行の代入と呼ばれた関数内での代入の競合は?

    Shell 結果
    fbsd sh 永続的でない
    bash 永続的でない
    bash -o posix 永続的+環境変数
    dash 永続的

    koie



    このエントリーをはてなブックマークに追加

    トラックバックURL

    コメントする

    名前
     
      絵文字