gsk*_*lee 11 shell bash string shell-script
#!/bin/bash
FILE="$(basename "$1")"
FILE="${FILE/%.jpeg/.jpg}"
Run Code Online (Sandbox Code Playgroud)
有没有办法将这两条线粘在一起形成一个单线?
Tim*_*edy 12
FILE=$(basename "${1/%.jpeg/.jpg}") 为我工作。
测试:
bash-$ ./test.sh /tmp/foo.jpeg
foo.jpg
Run Code Online (Sandbox Code Playgroud)
脚本内容:
bash-$ cat test.sh
#!/usr/bin/bash
FILE=$(basename "${1/%.jpeg/.jpg}")
echo "$FILE"
Run Code Online (Sandbox Code Playgroud)
Gil*_*il' 11
您不能在 bash 中嵌套扩展(也不能在 ksh、ash 和除 zsh 之外的其他 shell 中嵌套)。这只是表面上的限制,因为正如您所说明的,您可以将中间表达式分配给临时变量。对于单行程序来说这有点烦人,但在脚本中,它的可读性可以说更好。
您可以避免使用外部实用程序basename,而是使用字符串操作构造:
FILE="${1##*/}"; FILE="${FILE/%.jpeg/.jpg}"
Run Code Online (Sandbox Code Playgroud)
在这里,您可以重写脚本以将命令替换放在外部。这不是普遍现象,除了某种单一的感觉之外,您也不会获得任何其他东西。
Zsh,无论好坏,确实让您嵌套扩展:
FILE=${$(basename $1)/%.jpeg/.jpg} # using basename
FILE=${${1##*/}/%.jpeg/.jpg} # using string rewriting
Run Code Online (Sandbox Code Playgroud)
或者您可以使用 zsh 的内置构造而不是basename:
FILE=${${1:t}/%.jpeg/.jpg}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9494 次 |
| 最近记录: |