linux - 无法从包含句点的参数中获取 "touch"文件

标签 linux bash

我正在尝试制作一个 shell 脚本,使为 qemu-launcher(我尝试过的 4 个 qemu GUI 中唯一对我有用的)制作配置文件成为一个一步过程,但无法弄清楚如何将命令行参数传递给“touch”命令。

我的控制台输入是config hello.iso

到目前为止我的脚本是:

#!/bin/sh

touch $1

这不会创建文件。我尝试创建一个等于 $1 的变量,然后使用它,但我仍然没有得到任何响应。我已经在双引号和单引号中尝试了 $1 ;使用 double 我什么也得不到,而使用 single 生成的文件名是 1

但是,如果我仅传递 hello 参数,则会创建具有该名称的文件,但我需要扩展名才能与其他内容一起使用。

难道不能这样做吗?还是我只是不明白?

我真正想做的是获取参数并从中删除 .iso,然后使用它作为文件名,但我很确定我可以使用 grep 正向前瞻来做到这一点。

最佳答案

如果您使用 bash 而不是 sh:

#! /bin/bash

myVar=$1
touch ${myVar%.iso}

会完成这项工作。 '%' 后面的字符串将从变量内容的末尾剥离。 要获取有关当前脚本版本的更多信息,请尝试以下操作:

  • 重命名您的脚本 - 不要使用“config”
  • 通过“echo ”更改“触摸”
  • 将脚本的输出重定向到文件
  • 查看输出内容

    od -a myOutputOfTheScript

或者... 调用你的脚本

bash -x myScript hello.iso > ouput.txt

关于linux - 无法从包含句点的参数中获取 "touch"文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17772214/

相关文章:

java - 打开文件时如何在 emacs 中自动缩进?

linux - 无法在 Perforce P4V Linux 客户端中查看与特定标签关联的文件

linux - grep:无效的正则表达式

linux - 在脚本中运行 gdb 时自动退出

linux - 在 Cairo 支持下构建 Pango

c++ - Linux C++ 如何以编程方式获取 LAN 上所有适配器的 MAC 地址

linux - 使用 check_nrpe 检查 CPU 性能——奇怪的行为

bash - 在保留格式的同时提取两个模式(包括)之间的字符串

linux - 使用 bash 在 Linux 中获取子网掩码

linux - 我怎样才能得到下个月的 shell ?