他の変数bashで変数が拡張されていません。

他の変数bashで変数が拡張されていません。

次のようにbashスクリプトからcsvファイルを読み込んでいます。

resource='/data/bscs/'
while IFS='|'read seqid fname fpath 
do
    echo "FILENO:         $seqid"
    echo "FILENAME:       $fname"
    echo "FILE_PATH:    $fpath"                    
done < "report.csv"

私のCSVファイルの値は次のとおりです。

3|サンプル1.txt|$リソース/作業/

$ fname内で$ resourceを拡張したいと思います。代わりに、次のような出力を取得します。

FILENO:         3
FILENAME:       sample1.txt
SOURCE PATH:    $resource/operation

私は以下を試しました:

"${fpath}" $(echo $fpath)

この目標をどのように達成できますか?

ベストアンサー1

あなたはそれを使用することができますevalしかし、次の管理者はあなたの名前を呪います。解析されたデータを使用するときに変数を追加してみましたか、それとも使用時に変数を拡張してみましたか?作るデータ?

ファイルがこのように生成された場合、コンストラクタが邪悪な方法を変更するように説得するためにいくつかの[編集]技術を使用することはできませんか?

変更が実際に不可能な場合、〜しなければならない可能な変数を制御します。そうしないと、スクリプトが入力などのさまざまな注入攻撃に対して脆弱になります3|sample1.txt|$(rm --arr --eff /)/operation/。あなたのせいで確かにこれを制御すると、状況に応じて変数値で文字通り置き換えることができます。

IFS='/' read -a pathnames <<< "$fpath"
for pathname in "${pathnames[@]}"
do
    if [ "${pathname::1}" = '$' ]
    then
        variable_name="${pathname:1}"
        printf '%s' "${!variable_name}"
    else
        printf '%s' "$pathname"
    fi
done

パス名の間にスラッシュを追加するには、追加の定型句を使用してください。

おすすめ記事