gas*_*par 6 bash shell special-characters
我有一个 bash 脚本,只需添加新用户并签署调用脚本时传递的密码即可:
./adduser_script username password
Run Code Online (Sandbox Code Playgroud)
然后密码将用作脚本中的参数,如下所示:
/usr/sbin/useradd ... -p `openssl passwd -1 "$2"` ...
Run Code Online (Sandbox Code Playgroud)
当密码包含 $@、$* itd 等特殊字符时,当然会出现问题。所以当我调用脚本时:
/adduser_script username aa$@bbb
Run Code Online (Sandbox Code Playgroud)
脚本结束后,密码如下所示:aabbb(因此特殊字符将从原始密码中删除)。问题是如何正确地将带有特殊字符的原始密码传递给脚本?
预先感谢, 问候
你尝试过强引用吗?
使用“aa$@bb”代替弱引用,即“aa$@bb”
例如:使用 echo 命令检查
echo "aa$@bb" will print aabb
Run Code Online (Sandbox Code Playgroud)
尽管
echo 'aa$@bb' will print aa$@bb
Run Code Online (Sandbox Code Playgroud)
在你的脚本中使用
/usr/sbin/useradd ... -p `openssl passwd -1 '$2'` ...
Run Code Online (Sandbox Code Playgroud)
现在,在传递密码作为参数时,您无需担心 qoutes。
问题可能根本不在于您的脚本,而在于您如何调用它。至少从您提供的片段来看,密码字段似乎没有被评估。
因此,当您调用脚本时,如果参数包含类似 $a 的内容,bash 会将其替换为变量的值a
,如果未设置,则替换为空字符串。
如果$
需要在密码中,则需要用单引号引起来。
./adduser_script username 'password$@aaa'
Run Code Online (Sandbox Code Playgroud)