我想知道为什么我的简单脚本不起作用:
#!/usr/bin/env bash
user_variable='$1'
echo "export USER_VAR=$user_variable" > ~$user_variable/.filename
当我启动脚本时出现此错误:
./script.sh admin: line 3: ~admin/.filename: No such file or directory
当然,目录~管理员存在:
~ # cd ~admin
/share/homes/admin #
如果我直接在命令行中测试这种命令,它是有效的:
# echo "test" > ~admin/.filetest
#
那么为什么我的 echo 命令在脚本文件中不起作用?
谢谢。
答案1
从bash(1)
:
扩展的顺序是:括号扩展、波浪号扩展、参数、变量和算术扩展和命令替换(以从左到右的方式完成)、单词拆分和路径名扩展。
即,它在变量扩展之前进行波浪符号扩展,因此它不会替换$user_variable
($1
我假设是“ admin
”),直到它尝试处理~
- 并且失败之后,因为它正在寻找名为“ $user_variable
”的用户而不是名为“ admin
”的用户。
答案2
此处扩展的顺序不会阻止你按照原意使用变量。通常评估可以在动态命令方面提供帮助。
eval "echo \"export USER_VAR=$user_variable\" > ~$user_variable/.filename"