1

以下代码用于在确切位置创建文件。但是运行 test.sh abc 的结果是

触摸:缺少文件操作数

#! /bin/sh
#test.sh
location='~/configuration/'$1
echo $location
touch `$location`

有什么问题吗?谢谢!

4

4 回答 4

3

通过$location添加反引号,您正在尝试执行$location并将其用作参数touch(参见此处,第 3.4.5 节)只需执行以下操作:

touch $location

如果您#!/bin/sh使用该-x值运行,您将更清楚地看到bash您的 shell 脚本中正在执行的操作。这是调试脚本的一种非常有用的方法。

于 2012-10-08T14:01:15.540 回答
2

位置是文件夹还是文件?if file -f if folder -d in below script --- bash 应该明白了~

#! /bin/bash
#test.sh
var1=$1;
location=~/configuration/$var1
echo $location

if [ ! -f $location ]; then
 echo "not found touching $location"
 touch `$location`
fi
于 2012-10-08T16:47:33.410 回答
2

当你加上~引号时,它就失去了它的特殊含义。你需要:

#! /bin/sh
#test.sh
location=~/configuration/"$1"
echo "$location"
touch "$location"

您应该养成始终将变量放在双引号中的习惯(直到您了解不需要引号的特定时间)。

于 2012-10-08T15:00:39.113 回答
0

有几种方法可以做到这一点,但第一个解决方法是更改​​为

touch `echo $location`

但是我认为这样做可能更简单

touch ~/configuration/$1
于 2012-10-08T14:01:44.850 回答