Linux系统中有许多特殊字符,除了常见的*
, ?
, |
, >
等,还有一些不太为人熟知但功能强大的特殊字符。以下是一些值得注意的特殊字符及其应用场景:
<(command)
和 >(command)
diff <(ls dir1) <(ls dir2)
{start..end..increment}
echo {1..10..2} # 输出: 1 3 5 7 9
mkdir -p dir{1..5}/subdir{A..C}
[[:class:]]
ls [[:upper:]]* # 列出所有以大写字母开头的文件
可用类包括:
- [:alnum:]
- 字母数字
- [:alpha:]
- 字母
- [:digit:]
- 数字
- [:lower:]
- 小写字母
- [:upper:]
- 大写字母
{ command1; command2; }
{ date; who; } > logfile
(command1; command2)
不同,它在当前shell执行${variable:offset:length}
str="abcdef"
echo ${str:2:3} # 输出: cde
${variable#pattern}
和 ${variable%pattern}
path="/usr/local/bin/app"
echo ${path#*/} # usr/local/bin/app
echo ${path##*/} # app (贪婪匹配)
echo ${path%/*} # /usr/local/bin
#
删除前缀匹配%
删除后缀匹配##
和 %%
是贪婪版本${variable:-default}
echo ${UNDEFINED:-"default value"}
${variable:=default}
- 同时赋值${variable:?error}
- 未定义时报错${variable:+alternate}
- 已定义时使用替代值<<< "string"
grep "search" <<< "this is the string to search in"
^
(Ctrl键的特殊用法)^old^new # 重复上条命令,将old替换为new
: '多行注释'
: '
这是一个多行注释
不会被执行的代码块
'
cp file.txt{,.bak}
for file in *.jpg; do mv "$file" "${file%.jpg}_backup.jpg"; done
unset -v 'var${i}' # 使用引号防止特殊字符干扰
echo {A..Z}{0..9} | tr ' ' '\n' > testdata.txt
这些特殊字符可以显著提高命令行操作的效率和表达能力,掌握它们能让你的Linux使用体验更加高效和愉快。