我想找到一个文件的路径,并将该输出保存到 shell 脚本中的变量中。具体来说,在 bash shell 中,如果我写
GCC_VERSION="find *-gcc"
然后
echo ${GCC_VERSION}
印刷
find some-gcc
如何让变量GCC_VERSION
只保存 的输出find
?也就是说,如何将find *-gcc
命令的输出保存到变量中GCC_VERSION
,以便
echo ${GCC_VERSION}
印刷
some-gcc
答案1
首先,你的find
命令是错误的。如果你想在当前目录中查找所有以 结尾的文件,-gcc
则应该是:
$ find . -type f -name "*-gcc"
保存输出find
使用GCC_VERSION
process substitution
:
$ GCC_VERSION=$(find . -type f -name "*-gcc")
请注意,您可能有多个以 结尾的文件,-gcc
因此将变量名括在双引号中:
$ echo "$GCC_VERSION"
./mipsel-linux-gnu-gcc
./aarch64-linux-gnu-gcc
./mips-linux-gnu-gcc
./arm-linux-gnueabihf-gcc
答案2
您需要使用反引号
VARIABLE=`Command`
或者更好的推荐新式命令替换语法
VARIABLE=$(Command)
虽然两种形式都受支持,但前者嵌入脚本有限制。
命令替换的“$()”形式解决了使用反引号时行为不一致的问题。例如:
Command Output
echo '\$x' \$x
echo `echo '\$x'` $x
echo $(echo '\$x') \$x
此外,反引号语法对嵌入命令的内容有历史限制。虽然较新的“$()”形式可以处理任何类型的有效嵌入脚本,但反引号形式无法处理包含反引号的某些有效脚本。例如,这些原本有效的嵌入脚本在左列中不起作用,但在右列中起作用:
echo ` echo $(
cat <<\eof cat <<\eof
a here-doc with ` a here-doc with )
eof eof
` )
... 引用结束。