以下代码用于在确切位置创建文件。但是运行 test.sh abc 的结果是
触摸:缺少文件操作数
#! /bin/sh
#test.sh
location='~/configuration/'$1
echo $location
touch `$location`
有什么问题吗?谢谢!
通过$location
添加反引号,您正在尝试执行值$location
并将其用作参数touch
(参见此处,第 3.4.5 节)只需执行以下操作:
touch $location
如果您#!/bin/sh
使用该-x
值运行,您将更清楚地看到bash
您的 shell 脚本中正在执行的操作。这是调试脚本的一种非常有用的方法。
位置是文件夹还是文件?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
当你加上~
引号时,它就失去了它的特殊含义。你需要:
#! /bin/sh
#test.sh
location=~/configuration/"$1"
echo "$location"
touch "$location"
您应该养成始终将变量放在双引号中的习惯(直到您了解不需要引号的特定时间)。
有几种方法可以做到这一点,但第一个解决方法是更改为
touch `echo $location`
但是我认为这样做可能更简单
touch ~/configuration/$1