jes*_*adi 7 command-line bash scripts
为什么此脚本的输出中没有出现波浪号扩展?
#!/bin/bash
read -p "Enter filename: " fname
if [[ -d $fname ]]
then
echo "$fname is a directory"
else
echo "$fname is not a directory"
fi
Run Code Online (Sandbox Code Playgroud)
输出:
$ bash -x test_cd.sh
+ read -p 'Enter filename: ' fname
Enter filename: ~/Music
+ [[ -d ~/Music ]]
+ echo ' ~/Music is not a directory'
~/Music is not a directory
Run Code Online (Sandbox Code Playgroud)
这仅仅是因为read
在保存字符串之前不执行波浪号扩展,以后也不会对变量内容执行。您可以$HOME
改用并输入
$HOME/Music
Run Code Online (Sandbox Code Playgroud)
或者让脚本测试~/
并替换它(取自这个答案):
case "$fname" in "~/"*)
fname="${HOME}/${x#"~/"}"
esac
Run Code Online (Sandbox Code Playgroud)
您还可以使用bash
Parameter Expansion替换字符串开头的~/
with $HOME
:
if [[ -d ${fname/#~\//$HOME\/} ]]
Run Code Online (Sandbox Code Playgroud)
在执行替换之前扩展此变量。