这个问题在这里已经有了答案:
When should I wrap quotes around a shell variable?
(6 个回答)
去年关闭。
我正在尝试在 ubuntu 上使用分号设置此环境变量:
BS_DATABASE_CONNECTION=connection;Data Source=source;Initial Catalog=catalog;Persist Security Info=info;User ID=userid;Password=password;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;
但我得到这些错误:
数据:找不到命令
初始:找不到命令
坚持:找不到命令
用户:找不到命令
我该如何正确设置?
最佳答案
问题是 ;
被视为控制运算符,字符串 BS_DATABASE_CONNECTION=connection;Data Source=source;...
被解释为多个命令。第一个是命令BS_DATABASE_CONNECTION=connection
,第二个是命令Data Source=source
等。一种解决方案是使用引号:
BS_DATABASE_CONNECTION='connection;Data Source=source;Initial Catalog=catalog;Persist Security Info=info;User ID=userid;Password=password;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;'
但是对于这么长的值,执行以下操作可能更具可读性:BS_DATABASE_CONNECTION="\
connection;\
Data Source=source;\
Initial Catalog=catalog;\
Persist Security Info=info;\
User ID=userid;\
Password=password;\
MultipleActiveResultSets=False;\
Encrypt=True;\
TrustServerCertificate=False;\
"
或者BS_DATABASE_CONNECTION=''
for x in 'connection' \
'Data Source=source' \
'Initial Catalog=catalog' \
'Persist Security Info=info' \
'User ID=userid' \
'Password=password' \
'MultipleActiveResultSets=False' \
'Encrypt=True' \
'TrustServerCertificate=False' \
; do
BS_DATABASE_CONNECTION="${BS_DATABASE_CONNECTION}${x};"
done
或者read BS_DATABASE_CONNECTION << EOF
connection;\
Data Source=source;\
Initial Catalog=catalog;\
Persist Security Info=info;\
User ID=userid;\
Password=password;\
MultipleActiveResultSets=False;\
Encrypt=True;\
TrustServerCertificate=False;
EOF
或者BS_DATABASE_CONNECTION=$( tr \\n \; << EOF
connection
Data Source=source
Initial Catalog=catalog
Persist Security Info=info
User ID=userid
Password=password
MultipleActiveResultSets=False
Encrypt=True
TrustServerCertificate=False
EOF
)
请注意,这不是环境变量。它只是一个 shell 变量。如果您希望它处于子shell 环境中,则应将其导出。是否在 shell 的环境中应该是完全不相关的,环境变量和导出的 shell 变量之间没有功能上的区别。
关于linux - linux不能用分号设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67505935/