我需要在Bash脚本中向文件写入一个参数,所以我正在做类似于这样的操作:
echo "Argument is: $1" >> file
问题在于,如果参数中有波浪号(~),我不希望它被扩展到主目录。因此,如果用户将~/bin作为脚本的参数传递,它将被写成~/bin而不是/home/user/bin。我该怎么做呢?
我假设您的程序是这样启动的:
$ your_prog ~/foo
在您的程序启动之前,参数已经被翻译了,因此除了教育用户适当引用以避免不必要的扩展之外,您无法阻止它:
$ your_prog "~/foo"
read
命令接受用户输入。read var
echo "$var"
Charles Duffy提供了正确的答案。你的程序表现正常。尝试以下操作:
$ echo The HOME directory is ~
$ echo "The HOME directory is ~"
""
)的参数或需要转义\~
。 - Prince John Wesleyyour-script ~/foo
,则~
将由用户的shell进行扩展。 对于your-script
来说,没有办法知道用户键入了波浪号; 它所看到的仅是参数"/home/theuser/foo"
。 任何bash用户都需要注意这种行为。 由于~
表示 用户的主目录,那么为什么不想要将其扩展? - Keith Thompson