簡體   English   中英

如何將值為 bash 的變量導出為帶連字符的字符串?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM