为什么不使用此代码?
#!/bin/bash
test="~/.test"
function fn_append () {
echo "check vars: $1 ··· ${1} ··· $2"
echo "check comm: echo \"$2\" >> $1"
#this returns "No such file or directory"
echo $2 >> $1
echo $2 >> ${1}
echo $2 >> "$1"
#this creates file named $1
echo $2 >> '$1'
#this works (but it isn't enough)
echo $2 >> ~/.test
#this is the command Im trying to create.
#echo "alias ll='ls -lstra'" >> ~/.test
}
fn_append ${test} "alias ll='ls -lstra'"
执行输出:
check vars: ~/.test ··· ~/.test ··· alias ll='ls -lstra'
check comm: echo "alias ll='ls -lstra'" >> ~/.test
./test.sh: line 9: ~/.test: No such file or directory
./test.sh: line 10: ~/.test: No such file or directory
./test.sh: line 11: ~/.test: No such file or directory
该文件确实存在(尽管它不会使脚本无论如何都有效)并且我有权限。该命令适用于终端并在脚本上进行硬编码。失败的是与" $ 1"。
相关的东西P.D:我知道还有其他方法可以追加文件。我现在一直在使用它们,但我仍然希望修复此代码,或者至少知道它为什么不起作用。
答案 0 :(得分:6)
变量扩展比波浪扩展晚发生:
扩展的顺序是:支撑扩展,波浪扩展,参数,变量 和算术扩展和命令替换(以从左到右的方式完成), 单词拆分和路径名扩展。
(来自man bash
,强调我的)
因此,bash不能扩展变量值中的波浪号。如果您确实直接在赋值中赋值,请不要使用引号:波形扩展在指定的值上发生。
test=~/.test
如果文件名需要引用,请将开头保持为引号中的第一个斜杠:
test=~username/'path that/needs quoting'
答案 1 :(得分:0)
下面的表达式不起作用
test=~"/.test"给.test文件提供绝对路径的最佳方法。例如
test="/home/user/.test"