【发布时间】:2012-08-27 18:46:42
【问题描述】:
我需要在 Bash 脚本中向文件写入参数,所以我正在做这样的事情,
echo "Argument is: $1" >> file
问题是,如果参数中有波浪号 (~),我不希望它扩展到主目录。因此,如果用户将 ~/bin 作为参数传递给脚本,它将被写为 ~/bin 而不是 /home/user/bin。我该怎么做?
【问题讨论】:
-
用户需要传递引用的(
"") 参数或者需要转义\~。 -
@PrinceJohnWesley 我不想将其作为用户要求。
-
我不确定你能否解决这个问题(外壳总是会展开,除非用户引用参数)。我认为提示用户输入是你唯一的希望。我最近遇到了这个问题,所以你不是唯一一个被这个“功能”咬伤的人。
-
如果用户输入
your-script ~/foo,那么~会被用户的shell扩展。your-script根本无法知道用户输入了波浪号;它所看到的所有参数都是"/home/theuser/foo"。任何 bash 用户都需要注意这种行为。既然~表示用户的主目录,那你为什么不展开呢?