Linux:setコマンドからbashファイルへのパーサー変数

Linux:setコマンドからbashファイルへのパーサー変数

setコマンドからbashスクリプトに変数を渡そうとします。

$ set BeginTime=2021-10-11 2:23:00 & ./getBeginTime.sh

文書getBeginTime.sh:

local getBeginTime=$(set | grep BeginTime)
echo "BeginTime : = $getBeginTime"

echo $getBeginTime空の文字列が返される理由を説明してください。

答え1

コードに多くの誤解があります

  1. 文字列なしで変数を直接割り当てますset。割り当てられた文字列にスペースまたは他のシェル固有の文字が含まれている場合は、割り当てられた文字列を引用します(疑わしい場合は引用)。

    BeginTime='2021-10-11 2:23:00'
    
  2. 子供として働かないでください。子プロセスは親プロセスに影響を与えることはできません。割り当てを実行すると、&親プロセスは変更されず、すぐに終了する子プロセスに値を割り当てます。

  3. この値はまだ環境に提供されていないため(使用のためexport)、スクリプトに渡すにはコマンドラインに含める必要があります。

    ./getBeginTime.sh "$BeginTime"
    

    その後、その値をスクリプトの最初のパラメータとして選択できます。

    #!/bin/sh
    getBeginTime="$1"
    echo "BeginTime : = $getBeginTime"
    

    このステートメントを書くより良い方法echoは、を使用することですprintf。このechoコマンドはシェルでは非標準であり、実装によって特定の文字シーケンスを異なる方法で処理します。一方、printfより標準化されています。以下は、変数%sに対応するパラメータのプレースホルダです。"$getBeginTime"

    printf "BeginTime : = %s\n" "$getBeginTime"
    

実際に値を環境変数に渡す場合は、次のセクションで2つの方法を説明しますが、これは値を渡す一般的な方法ではありません。

# Define an environment variable just for this invocation
BeginTime='2021-10-11 2:23:00' ./getBeginTime.sh

または

# Define an environment variable for the remainder of this session
export BeginTime='2021-10-11 2:23:00'

# You can now use it as many times as you want
./getBeginTime.sh
./getBeginTime.sh

コードでは"$BeginTime"変数として使用できます。

答え2

これを行う2つの方法は次のとおりです。

1. 環境変数を使用します。

Bash 端末で変数を設定します。

export BeginTime="2021-10-11 2:23:00"

次に、非常に単純なスクリプトでtest.shその変数を呼び出します。

[ws] user test_directory >cat test.sh

echo $BeginTime

2. パラメータ伝達:

test.shスクリプトは次のようになります。

[ws] user test_directory >cat test.sh

echo $1

パラメータを使用して呼び出します。

[ws] user test_directory > bash test.sh "2021-10-11 2:23:00"

関連情報