bre*_*att 12 command-line find
我想找到文件的路径,并将该输出保存到 shell 脚本中的变量中。具体来说,在bash shell中,如果我写
GCC_VERSION="find *-gcc"
Run Code Online (Sandbox Code Playgroud)
然后
echo ${GCC_VERSION}
Run Code Online (Sandbox Code Playgroud)
印刷
find some-gcc
Run Code Online (Sandbox Code Playgroud)
如何让变量GCC_VERSION只保存 的输出find?这就是我如何将find *-gcc命令的输出保存到变量中,GCC_VERSION以便
echo ${GCC_VERSION}
Run Code Online (Sandbox Code Playgroud)
印刷
some-gcc
Run Code Online (Sandbox Code Playgroud)
Ark*_*zyk 21
首先,您的find命令不正确。如果要查找以-gcc当前目录结尾的所有文件,它应该是:
$ find . -type f -name "*-gcc"
Run Code Online (Sandbox Code Playgroud)
要保存find要GCC_VERSION使用的输出process substitution:
$ GCC_VERSION=$(find . -type f -name "*-gcc")
Run Code Online (Sandbox Code Playgroud)
请注意,您可能有多个以 结尾的文件,-gcc因此将变量名括在双引号中:
$ echo "$GCC_VERSION"
./mipsel-linux-gnu-gcc
./aarch64-linux-gnu-gcc
./mips-linux-gnu-gcc
./arm-linux-gnueabihf-gcc
Run Code Online (Sandbox Code Playgroud)
您需要使用反勾号
VARIABLE=`Command`
Run Code Online (Sandbox Code Playgroud)
或者更好的推荐的新式命令替换语法
VARIABLE=$(Command)
Run Code Online (Sandbox Code Playgroud)
虽然这两种形式都受支持,但在前者中嵌入脚本是有限制的。
引用自The Open Group Base Specifications Issue 7, 2018 版:
“$()”形式的命令替换解决了使用反引号时行为不一致的问题。例如:
Command Output
echo '\$x' \$x
echo `echo '\$x'` $x
echo $(echo '\$x') \$x
Run Code Online (Sandbox Code Playgroud)
此外,反引号语法对嵌入命令的内容有历史限制。虽然较新的“$()”表单可以处理任何类型的有效嵌入脚本,但反引号形式无法处理一些包含反引号的有效脚本。例如,这些其他有效的嵌入脚本在左列中不起作用,但在右列中起作用:
echo ` echo $(
cat <<\eof cat <<\eof
a here-doc with ` a here-doc with )
eof eof
` )
Run Code Online (Sandbox Code Playgroud)
...报价结束。
| 归档时间: |
|
| 查看次数: |
59737 次 |
| 最近记录: |