我遇到了一個簡單的問題,無法在 bash 變數中匯出帶有連字符的字串值。這是正在發生的事情:
.env
NAME_0=`Bruno - Souto`
NAME_1="Bruno - Souto"
NAME_2='Bruno - Souto'
匯出.sh
#!/bin/bash
set -xv
export $(cat .env | egrep -v "(^#.*|^$)" | xargs)
echo ${NAME_0}
echo ${NAME_1}
echo ${NAME_2}
輸出:
dev@dev:~/teste$ ./export.sh
export $(cat .env | egrep -v "(^#.*|^$)" | xargs)
cat .env
xargs
egrep -v '(^#.*|^$)'
export 'NAME_0=`Bruno' - 'Souto`' NAME_1=Bruno - Souto NAME_2=Bruno - Souto
NAME_0='`Bruno'
./export.sh: line 4: export: `-': not a valid identifier
./export.sh: line 4: export: `Souto`': not a valid identifier
NAME_1=Bruno
./export.sh: line 4: export: `-': not a valid identifier
NAME_2=Bruno
./export.sh: line 4: export: `-': not a valid identifier
echo ${NAME_0}
echo '`Bruno'
`Bruno
echo ${NAME_1}
echo Bruno
Bruno
echo ${NAME_2}
echo Bruno
Bruno
我確實需要用“xxx - xxx”匯出,無論如何。有任何想法嗎?
謝謝
uj5u.com熱心網友回復:
第一個賦值 ( NAME_0) 是無效的,因為反引號表示您要運行Bruno帶有引數-和的命令Souto。
不知道為什么你不只是source檔案,然后手動export變數(你已經知道名稱 - 每個echo呼叫 - 所以繼續export,也是),例如:
$ source .env
-bash: Bruno: command not found # result of using backticks in the NAME_0 assigment
$ typeset -p NAME_0 NAME_1 NAME_2
declare -- NAME_0=""
declare -- NAME_1="Bruno - Souto"
declare -- NAME_2="Bruno - Souto"
$ export NAME_0 NAME_1 NAME_2
$ typeset -p NAME_0 NAME_1 NAME_2
declare -x NAME_0=""
declare -x NAME_1="Bruno - Souto"
declare -x NAME_2="Bruno - Souto"
注意: NAME_0由于使用了反引號,因此為空.env
uj5u.com熱心網友回復:
使用單個襯里 .. 我會跳過檔案中的引號并使用...env讀入您的 bash 腳本 export
.env
NAME_0=Bruno - Souto
NAME_1=Bruno - Foo
NAME_2=Bruno - Bar
測驗.sh
#!/bin/bash
while read -r line; do LANG=C export "$line"; done <".env$1"
echo $NAME_0
echo $NAME_1
echo $NAME_2
輸出
$ bash test.sh
Bruno - Souto
Bruno - Foo
Bruno - Bar
命令列界面
~$ while read -r line; do LANG=C export "$line"; done <".env$1"
~$ echo $NAME_0
Bruno - Souto
~$ echo $NAME_1
Bruno - Foo
~$ echo $NAME_2
Bruno - Bar
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/432224.html
