“〜/ Desktop / test.txt:没有这样的文件或目录”

时间:2011-12-07 00:45:24

标签: bash shell unix

我写过这个剧本:

#!/bin/bash

file="~/Desktop/test.txt"
echo "TESTING" > $file

脚本不起作用;它给了我这个错误:

./tester.sh: line 4: ~/Desktop/test.txt: No such file or directory

我做错了什么?

2 个答案:

答案 0 :(得分:56)

尝试将~替换为$HOME。仅在波浪线未引用时才会发生Tilde扩展。请参阅info "(bash) Tilde Expansion"

您也可以在不引用的情况下执行file=~/Desktop,但是如果您用其中的字段分隔符替换其中的部分内容,那么它将会中断。引用变量的值可能是养成习惯的好事。引用变量file=~/"Desktop"也会起作用,但我觉得这很难看。

在可能的情况下更喜欢$HOME的另一个原因:波浪扩展只发生在单词的开头。因此command --option=~/foo仅在command确实扩展自身时才会起作用,这会因命令而异,而command --option="$HOME/foo"将始终有效。

答案 1 :(得分:1)

仅供参考,您也可以使用eval

eval "echo "TESTING" > $file"

eval将命令作为参数,它使shell执行Tilde expansion