将括号作为脚本参数传递给 macOs defaults 命令
Passing parentheses as script argument to macOs defaults command
我正在为我的 dotFiles 编写安装脚本。如果找到我的笔记本电脑,此脚本的一部分将获取一些基本联系信息以显示在锁定屏幕上。在这个阶段,消息看起来像这样
"If found, please call 000-000-0000 or email my@email.com"
这是我为此编写的函数:
function collectInfo() {
echo "We'll set a lock screen message for anyone who finds your laptop."
echo "Please enter a valid phone number: "
read phonenumber
echo "Please enter a valid email: "
read contactemail
msg="If found, please call "$phonenumber" or email "$contactemail
sudo defaults write /Library/Preferences/com.apple.loginwindow LoginwindowText $msg
if [ $? -eq 0 ]; then
echo "Data entered"
defaults read /Library/Preferences/com.apple.loginwindow LoginwindowText
else
echo "There was an issue with your input. Please try again"
collectInfo
fi
}
如果我尝试将括号传递给登录窗口设置,例如 (000) 000-0000,我会遇到麻烦。我可以回显 $msg 并且它似乎可以很好地创建字符串。有什么方法可以将带括号的字符串作为参数传递,还是我必须使用 sed 来消除它们?
这里有两个混杂因素:
- 未能在
$msg
周围加上引号会将其拆分为多个单独的参数。
- 以
(
开头,)
结尾的参数被defaults
解析为一个数组,所以(000)
被解析为一个元素的数组。
为确保您的内容被解析为字符串,您可以用文字引号开始和结束它:
defaults write /Library/Preferences/com.apple.loginwindow LoginwindowText "'$msg'"
外部双引号 ("
) 由 shell 处理,以确保整个消息仅作为一个参数传递;内部单引号 ('
) 被传递给 defaults
并指导它如何解析值。
我正在为我的 dotFiles 编写安装脚本。如果找到我的笔记本电脑,此脚本的一部分将获取一些基本联系信息以显示在锁定屏幕上。在这个阶段,消息看起来像这样
"If found, please call 000-000-0000 or email my@email.com"
这是我为此编写的函数:
function collectInfo() {
echo "We'll set a lock screen message for anyone who finds your laptop."
echo "Please enter a valid phone number: "
read phonenumber
echo "Please enter a valid email: "
read contactemail
msg="If found, please call "$phonenumber" or email "$contactemail
sudo defaults write /Library/Preferences/com.apple.loginwindow LoginwindowText $msg
if [ $? -eq 0 ]; then
echo "Data entered"
defaults read /Library/Preferences/com.apple.loginwindow LoginwindowText
else
echo "There was an issue with your input. Please try again"
collectInfo
fi
}
如果我尝试将括号传递给登录窗口设置,例如 (000) 000-0000,我会遇到麻烦。我可以回显 $msg 并且它似乎可以很好地创建字符串。有什么方法可以将带括号的字符串作为参数传递,还是我必须使用 sed 来消除它们?
这里有两个混杂因素:
- 未能在
$msg
周围加上引号会将其拆分为多个单独的参数。 - 以
(
开头,)
结尾的参数被defaults
解析为一个数组,所以(000)
被解析为一个元素的数组。
为确保您的内容被解析为字符串,您可以用文字引号开始和结束它:
defaults write /Library/Preferences/com.apple.loginwindow LoginwindowText "'$msg'"
外部双引号 ("
) 由 shell 处理,以确保整个消息仅作为一个参数传递;内部单引号 ('
) 被传递给 defaults
并指导它如何解析值。