我需要在Bash脚本中为一个文件写一个参数,所以我正在做这样的事情,
echo "Argument is: $1" >> file
问题是如果参数中有波浪号(〜),我不希望它扩展到主目录。因此,如果用户将〜/ bin作为参数传递给脚本,它将被写为〜/ bin而不是/ home / user / bin。我该怎么做?
答案 0 :(得分:6)
我认为你的程序是以:
开始的$ your_prog ~/foo
在你的程序开始之前翻译了这个参数,所以除了教育用户在不需要扩展时教导用户正确引用时,除了教育用户之外没有什么办法可以阻止它:
$ your_prog "~/foo"
答案 1 :(得分:4)
您可以使用read
命令接受用户输入。
read var
echo "$var"
答案 2 :(得分:3)
Charles Duffy有正确的答案。你的程序表现完全符合预期。试试这些:
$ echo The HOME directory is ~
$ echo "The HOME directory is ~"
您会看到仅仅将波浪号放在引号中会阻止扩展。
尽管有引号,但是你没有看到波形符的原因是shell在程序甚至将其作为参数之前扩展了波形符。
Unix中的shell本身就是一个非常强大的生物。它处理~
和*
等变量和特殊字符的扩展,因此您的程序不需要。
正如一位老教授曾经告诉我的那样,“这非常好,除非它不是”。在这个特殊情况下“它不是”。 Unix shell阻止你看到你想要的东西。
解决这个问题的唯一方法是摆脱shell。您可以使用read
语句来完成此操作。