问题出现是因为你使用了一个不带引号的子shell和-F标志,用于输出附加到文件名的ls输出shell特殊字符.
-F, -
将附加指示符(*/=> @ |之一)分类到条目
可执行文件附加*.
当你跑步
echo $(ls -1 -tF | head -n 1)
Run Code Online (Sandbox Code Playgroud)
然后
$(ls -1 -tF | head -n 1)
Run Code Online (Sandbox Code Playgroud)
将返回一个文件名,如果它恰好是一个可执行文件,也是另一个文件的前缀,那么它将返回两者.
例如,如果你有
test.sh
test.sh.backup
Run Code Online (Sandbox Code Playgroud)
然后它会回来
test.sh*
Run Code Online (Sandbox Code Playgroud)
当回声扩展到
test.sh test.sh.backup
Run Code Online (Sandbox Code Playgroud)
引用子shell可以防止这种扩展
echo "$(ls -1 -tF | head -n 1)"
Run Code Online (Sandbox Code Playgroud)
回报
test.sh*
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |