假设我有一个名为script1的脚本,我想传递一个名为file in 1
的文件("文件和&#34之间有4个空格;"
所以,我希望能够将此文件名传递给脚本而不使用"":
./script1 file in 1
而不是:
./script1 "file in 1"
我尝试使用" $ *"在脚本中正确接收文件名,但脚本收到的是:file in 1
(省略空格)
有没有办法在bash中这样做?
答案 0 :(得分:1)
你无能为力或应该做什么。假设您的脚本(正确地)写为
#!/bin/bash
cat "$1"
如果您的教师希望您的脚本处理
./script file in 1
和
./script "file in 1"
同样地,你的导师对shell如何运作有着深刻的误解。
答案 1 :(得分:-1)
命令:
./script file in 1
将使用三个不同的输入文件执行./scrip
:file
,in
和1
。如果您希望./scrip
将file in 1
作为单个文件阅读,但又不想在通话中使用引号,那么您有以下选择:
#!/usr/bin/env bash
# Not ideal, as it also matches any number of characters
# between "file", "in" and "1": file--in--1
cat "$(ls $1*$2*$3)"
# Better but also matches single (or any number) of spaces: file in 1
cat "$(ls $1*$2*$3 | grep "$1 *$2 *$3")"
# Will only match: file in 1
cat "$(ls $1*$2*$3 | grep -E "$1 {4}$2 {1}$3")"