Wei*_*i Z 19 bash shell wildcards expansion
我知道有一组特定的规则可以让 shell 扩展用户输入的命令。(让我们谈谈 bash shell。)
shell扩展后是否可以打印出表单中的命令?它似乎是一个很好的实用工具,可以学习和确定 shell 如何扩展特殊字符。
例如
$ echo *
{all the filenames in current dir}
Run Code Online (Sandbox Code Playgroud)
我想打印出展开的命令,即以下行:
echo {all the filenames in .}
Run Code Online (Sandbox Code Playgroud)
Joh*_*024 15
您可以使用set -x.
例如,考虑脚本:
$ cat script.sh
set -x
echo *
Run Code Online (Sandbox Code Playgroud)
运行时,它会echo在实际执行之前显示扩展语句:
$ bash script.sh
+ echo file1 file2 file3 script.sh
file1 file2 file3 script.sh
Run Code Online (Sandbox Code Playgroud)
而且,正如 Kundor 所指出的,这也可以在命令行上以交互方式工作:
$ set -x
+ set -x
$ echo *
+ echo file1 file2 file3 script.sh
file1 file2 file3 script.sh
Run Code Online (Sandbox Code Playgroud)
man bash解释set -x如下:
展开每个简单命令后,for command、case 命令、select 命令或算术for 命令,显示PS4 的展开值,后面是命令及其展开的参数或关联的单词列表。
PS4如上所示,默认值是一个加号后跟一个空格。
Ben*_*ebe 13
只需使用echo...把它放在你想扩展的命令前面。我经常使用这个。
$ ls
one.txt
two.txt
three.dat
$ echo rm *.txt
rm one.txt two.txt
$ rm *.txt
Run Code Online (Sandbox Code Playgroud)
您可以使用Home和Del快速添加/删除前面的echo.
编辑
正如指出的意见,如果该命令不只是一个简单的命令(例如,如果它是一个这是不行的for循环,使用管道|,或&&或其他任何类似的)。
对于交互式 shell,在键入 glob 模式后按Ctrl+x后跟*将编辑命令行并扩展该 glob 模式。从 bash 手册页:
全局扩展词 (
C-x *)point 之前的单词被视为路径名扩展的模式,并插入匹配的文件名列表,替换该单词。如果提供了数字参数,则在路径名扩展之前附加星号。
您可能还对 glob-list-expansions ( Ctrl+x, g)感兴趣。
| 归档时间: |
|
| 查看次数: |
4422 次 |
| 最近记录: |