文件名中带有变量的 Cat 命令不起作用

文件名中带有变量的 Cat 命令不起作用

我想通过提供包含变量的绝对路径来捕获或读取文件的内容,但是它不起作用。

以下命令均不起作用。
$line这是文件的名称)

content=`(cat /tmp/cygwin/cygwin/home/67642360/1.0.94/db/src/sql/oracle/updates/${line})`

cat '/tmp/cygwin/cygwin/home/67642360/1.0.94/db/src/sql/oracle/updates/'${line}

答案1

如果正如您所说 $line 包含您想要输出的文件的名称,您可以简单地cat(或moreless) 该变量。如cat $line

即使文件名包含空格也能起作用的更安全的方法是 cat "$line"

你应该确保你知道完整路径和相对路径因为如果混淆这两者,你就不太可能得到想要的结果。

答案2

来自 cat 的变量赋值:

content=$(cat /tmp/cygwin/cygwin/home/67642360/1.0.94/db/src/sql/oracle/updates/${line})
# Or
content=`cat /tmp/cygwin/cygwin/home/67642360/1.0.94/db/src/sql/oracle/updates/${line}`

从变量中 cat 文件:

cat /tmp/cygwin/cygwin/home/67642360/1.0.94/db/src/sql/oracle/updates/${line}
# OR
cat "/tmp/cygwin/cygwin/home/67642360/1.0.94/db/src/sql/oracle/updates/${line}"

答案3

什么是${line}

你能试一下echo ${line}吗 ?

您使用的是什么 shell?您可以将其设置line为有效的文件名。在此示例中,我使用的是 bash。

foo$ echo ${line}

foo$ echo "Hello World" > /tmp/foo.txt 
foo$ export line=foo.txt
foo$ echo ${line}
foo.txt
foo$ cat /tmp/${line}
Hello World
foo$ 

相关内容