文件中的回显返回“没有这样的文件或目录”

文件中的回显返回“没有这样的文件或目录”

我想知道为什么我的简单脚本不起作用:

#!/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"

相关内容