什么是使用含有保留通配符(文件名完成)触发一些不需要替换字符shell变量(BASH)最优雅的方式? 这里是例子:
for file in $(cat files); do
command1 < "$file"
echo "$file"
done
文件名包含像“[”或“]”字符。 我有两种基本思路:
1)关闭经由集-f通配符:我需要在别的地方
2)在逃生文件的文件名:管道进入标准输入时BASH抱怨“找不到文件”
THX对于任何建议
编辑:唯一的答案缺少的是如何从包含用于通配符时,文件名是在一个shell变量“$文件”,例如命令1 <“$文件”特殊字符名称的文件读取。
作为替代方案之间切换set -f
和set +f
你也许可以只申请一个set -f
到子shell,因为父shell的环境不会受到受此可言:
(
set -f
for file in $(cat files); do
command1 < "$file"
echo "$file"
done
)
# or even
sh -f -c '
for file in $(cat files); do
command1 < "$file"
echo "$file"
done
'
您可以关闭使用通配符set -f
,然后重新打开它后按照剧本set +f
。
使用while read
来代替。
cat files | while read file; do
command1 < "$file"
echo "$file"
done