如何判断变量是否是 bash 中的文件
How do I tell if a variable is a file in bash
我不是一个出色的 bash
脚本编写者,因此有几个问题。其中之一是 bash
如何(甚至是否)理解变量是 "file" 或仅仅是局部变量。
file=/usr/share/lib
显然这是一个要保存的文件等,可以这样使用:
echo "$output" > $file
将$output
的输出保存到$file
。
但是它在 bash
的什么地方计算它是否是一个文件,它是否只是一个文件,一旦它被传递给 'writing method'?
如果您将该变量视为文件名,bash 将简单地按照它的指示进行操作,例如
echo "Test output" > $file
无论文件设置为 /tmp/myfile.txt
还是 abcd
都将起作用。在上面,您使用 bash 的 file redirection 将标准写出到您命名的文件中。
因此,如果您在上述模式中使用了错误的变量,或者值设置不正确,bash 将简单地按照您的说明操作,您最终可能会得到错误的 named/located 个文件。
这个你自己去查,bash只知道变量的内容。如果要检查文件位置是否保存在变量中,可以使用 -f
test operator
对其进行测试
if [ -f "$file" ]
then
echo "$file is a file"
echo "$output" > "$file"
else
echo "$file is not a file"
fi
变量是字符串 - 仅此而已。 (我在这里忽略了数组变量,WLOG)。
Bash(或任何shell)盲目地扩展变量,而不考虑你打算用它们做什么。只有在命令处理的下一阶段,字符串的内容才重要。
要使用您的示例:
output="foo bar"
file=/usr/share/lib
echo "$output" >"$file"
(我已经引用了$file
,虽然这里没有必要,只是因为我被咬了太多次改变价值和打破一切)。
行
echo "$output" >"$file"
变成了
echo "foo bar" >"/usr/share/lib"
然后 bash 才会考虑 >
并尝试打开 /usr/share/lib
进行写入。
我不是一个出色的 bash
脚本编写者,因此有几个问题。其中之一是 bash
如何(甚至是否)理解变量是 "file" 或仅仅是局部变量。
file=/usr/share/lib
显然这是一个要保存的文件等,可以这样使用:
echo "$output" > $file
将$output
的输出保存到$file
。
但是它在 bash
的什么地方计算它是否是一个文件,它是否只是一个文件,一旦它被传递给 'writing method'?
如果您将该变量视为文件名,bash 将简单地按照它的指示进行操作,例如
echo "Test output" > $file
无论文件设置为 /tmp/myfile.txt
还是 abcd
都将起作用。在上面,您使用 bash 的 file redirection 将标准写出到您命名的文件中。
因此,如果您在上述模式中使用了错误的变量,或者值设置不正确,bash 将简单地按照您的说明操作,您最终可能会得到错误的 named/located 个文件。
这个你自己去查,bash只知道变量的内容。如果要检查文件位置是否保存在变量中,可以使用 -f
test operator
if [ -f "$file" ]
then
echo "$file is a file"
echo "$output" > "$file"
else
echo "$file is not a file"
fi
变量是字符串 - 仅此而已。 (我在这里忽略了数组变量,WLOG)。
Bash(或任何shell)盲目地扩展变量,而不考虑你打算用它们做什么。只有在命令处理的下一阶段,字符串的内容才重要。
要使用您的示例:
output="foo bar"
file=/usr/share/lib
echo "$output" >"$file"
(我已经引用了$file
,虽然这里没有必要,只是因为我被咬了太多次改变价值和打破一切)。
行
echo "$output" >"$file"
变成了
echo "foo bar" >"/usr/share/lib"
然后 bash 才会考虑 >
并尝试打开 /usr/share/lib
进行写入。