[英]How to export bash variable with value as string with hyphen?
我遇到了一個簡單的問題,無法在 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}
output:
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”導出,不管怎樣。 有任何想法嗎?
謝謝
第一個賦值 ( NAME_0
) 無效,因為反引號暗示您要使用-
和Souto
運行命令Bruno
。
不知道為什么你不只是獲取文件然后手動export
變量(你已經知道名稱 - 根據echo
調用 - 所以source
提前和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"
注意:由於在.env
中使用反引號, NAME_0
為空
使用單個襯里 .. 我會跳過您的.env
文件中的引號並使用export
.. 讀入您的 bash 腳本
.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
output
$ 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.